Merge viewer-neko
commit
529569cdd9
|
|
@ -107,11 +107,11 @@ BOOL LLGesture::trigger(const std::string& trigger_string)
|
|||
// NOT endian-neutral
|
||||
U8 *LLGesture::serialize(U8 *buffer) const
|
||||
{
|
||||
htonmemcpy(buffer, &mKey, MVT_S8, 1);
|
||||
htolememcpy(buffer, &mKey, MVT_S8, 1);
|
||||
buffer += sizeof(mKey);
|
||||
htonmemcpy(buffer, &mMask, MVT_U32, 4);
|
||||
htolememcpy(buffer, &mMask, MVT_U32, 4);
|
||||
buffer += sizeof(mMask);
|
||||
htonmemcpy(buffer, mSoundItemID.mData, MVT_LLUUID, 16);
|
||||
htolememcpy(buffer, mSoundItemID.mData, MVT_LLUUID, 16);
|
||||
buffer += 16;
|
||||
|
||||
memcpy(buffer, mTrigger.c_str(), mTrigger.length() + 1); /* Flawfinder: ignore */
|
||||
|
|
@ -134,11 +134,11 @@ U8 *LLGesture::deserialize(U8 *buffer, S32 max_size)
|
|||
return buffer;
|
||||
}
|
||||
|
||||
htonmemcpy(&mKey, tmp, MVT_S8, 1);
|
||||
htolememcpy(&mKey, tmp, MVT_S8, 1);
|
||||
tmp += sizeof(mKey);
|
||||
htonmemcpy(&mMask, tmp, MVT_U32, 4);
|
||||
htolememcpy(&mMask, tmp, MVT_U32, 4);
|
||||
tmp += sizeof(mMask);
|
||||
htonmemcpy(mSoundItemID.mData, tmp, MVT_LLUUID, 16);
|
||||
htolememcpy(mSoundItemID.mData, tmp, MVT_LLUUID, 16);
|
||||
tmp += 16;
|
||||
|
||||
mTrigger.assign((char *)tmp);
|
||||
|
|
@ -284,7 +284,7 @@ U8 *LLGestureList::serialize(U8 *buffer) const
|
|||
{
|
||||
// a single S32 serves as the header that tells us how many to read
|
||||
U32 count = mList.size();
|
||||
htonmemcpy(buffer, &count, MVT_S32, 4);
|
||||
htolememcpy(buffer, &count, MVT_S32, 4);
|
||||
buffer += sizeof(count);
|
||||
|
||||
for (S32 i = 0; i < count; i++)
|
||||
|
|
@ -310,7 +310,7 @@ U8 *LLGestureList::deserialize(U8 *buffer, S32 max_size)
|
|||
return buffer;
|
||||
}
|
||||
|
||||
htonmemcpy(&count, tmp, MVT_S32, 4);
|
||||
htolememcpy(&count, tmp, MVT_S32, 4);
|
||||
|
||||
if (count > MAX_GESTURES)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -187,7 +187,7 @@ BOOL LLDataPackerBinaryBuffer::packString(const std::string& value, const char *
|
|||
|
||||
if (mWriteEnabled)
|
||||
{
|
||||
htonmemcpy(mCurBufferp, value.c_str(), MVT_VARIABLE, length);
|
||||
htolememcpy(mCurBufferp, value.c_str(), MVT_VARIABLE, length);
|
||||
}
|
||||
mCurBufferp += length;
|
||||
return TRUE;
|
||||
|
|
@ -218,12 +218,12 @@ BOOL LLDataPackerBinaryBuffer::packBinaryData(const U8 *value, S32 size, const c
|
|||
|
||||
if (mWriteEnabled)
|
||||
{
|
||||
htonmemcpy(mCurBufferp, &size, MVT_S32, 4);
|
||||
htolememcpy(mCurBufferp, &size, MVT_S32, 4);
|
||||
}
|
||||
mCurBufferp += 4;
|
||||
if (mWriteEnabled)
|
||||
{
|
||||
htonmemcpy(mCurBufferp, value, MVT_VARIABLE, size);
|
||||
htolememcpy(mCurBufferp, value, MVT_VARIABLE, size);
|
||||
}
|
||||
mCurBufferp += size;
|
||||
return TRUE;
|
||||
|
|
@ -238,7 +238,7 @@ BOOL LLDataPackerBinaryBuffer::unpackBinaryData(U8 *value, S32 &size, const char
|
|||
return FALSE;
|
||||
}
|
||||
|
||||
htonmemcpy(&size, mCurBufferp, MVT_S32, 4);
|
||||
htolememcpy(&size, mCurBufferp, MVT_S32, 4);
|
||||
mCurBufferp += 4;
|
||||
|
||||
if (!verifyLength(size, name))
|
||||
|
|
@ -247,7 +247,7 @@ BOOL LLDataPackerBinaryBuffer::unpackBinaryData(U8 *value, S32 &size, const char
|
|||
return FALSE;
|
||||
}
|
||||
|
||||
htonmemcpy(value, mCurBufferp, MVT_VARIABLE, size);
|
||||
htolememcpy(value, mCurBufferp, MVT_VARIABLE, size);
|
||||
mCurBufferp += size;
|
||||
|
||||
return TRUE;
|
||||
|
|
@ -263,7 +263,7 @@ BOOL LLDataPackerBinaryBuffer::packBinaryDataFixed(const U8 *value, S32 size, co
|
|||
|
||||
if (mWriteEnabled)
|
||||
{
|
||||
htonmemcpy(mCurBufferp, value, MVT_VARIABLE, size);
|
||||
htolememcpy(mCurBufferp, value, MVT_VARIABLE, size);
|
||||
}
|
||||
mCurBufferp += size;
|
||||
return TRUE;
|
||||
|
|
@ -276,7 +276,7 @@ BOOL LLDataPackerBinaryBuffer::unpackBinaryDataFixed(U8 *value, S32 size, const
|
|||
{
|
||||
return FALSE;
|
||||
}
|
||||
htonmemcpy(value, mCurBufferp, MVT_VARIABLE, size);
|
||||
htolememcpy(value, mCurBufferp, MVT_VARIABLE, size);
|
||||
mCurBufferp += size;
|
||||
return TRUE;
|
||||
}
|
||||
|
|
@ -320,7 +320,7 @@ BOOL LLDataPackerBinaryBuffer::packU16(const U16 value, const char *name)
|
|||
|
||||
if (mWriteEnabled)
|
||||
{
|
||||
htonmemcpy(mCurBufferp, &value, MVT_U16, 2);
|
||||
htolememcpy(mCurBufferp, &value, MVT_U16, 2);
|
||||
}
|
||||
mCurBufferp += 2;
|
||||
return TRUE;
|
||||
|
|
@ -334,7 +334,7 @@ BOOL LLDataPackerBinaryBuffer::unpackU16(U16 &value, const char *name)
|
|||
return FALSE;
|
||||
}
|
||||
|
||||
htonmemcpy(&value, mCurBufferp, MVT_U16, 2);
|
||||
htolememcpy(&value, mCurBufferp, MVT_U16, 2);
|
||||
mCurBufferp += 2;
|
||||
return TRUE;
|
||||
}
|
||||
|
|
@ -349,7 +349,7 @@ BOOL LLDataPackerBinaryBuffer::packU32(const U32 value, const char *name)
|
|||
|
||||
if (mWriteEnabled)
|
||||
{
|
||||
htonmemcpy(mCurBufferp, &value, MVT_U32, 4);
|
||||
htolememcpy(mCurBufferp, &value, MVT_U32, 4);
|
||||
}
|
||||
mCurBufferp += 4;
|
||||
return TRUE;
|
||||
|
|
@ -363,7 +363,7 @@ BOOL LLDataPackerBinaryBuffer::unpackU32(U32 &value, const char *name)
|
|||
return FALSE;
|
||||
}
|
||||
|
||||
htonmemcpy(&value, mCurBufferp, MVT_U32, 4);
|
||||
htolememcpy(&value, mCurBufferp, MVT_U32, 4);
|
||||
mCurBufferp += 4;
|
||||
return TRUE;
|
||||
}
|
||||
|
|
@ -378,7 +378,7 @@ BOOL LLDataPackerBinaryBuffer::packS32(const S32 value, const char *name)
|
|||
|
||||
if (mWriteEnabled)
|
||||
{
|
||||
htonmemcpy(mCurBufferp, &value, MVT_S32, 4);
|
||||
htolememcpy(mCurBufferp, &value, MVT_S32, 4);
|
||||
}
|
||||
mCurBufferp += 4;
|
||||
return TRUE;
|
||||
|
|
@ -392,7 +392,7 @@ BOOL LLDataPackerBinaryBuffer::unpackS32(S32 &value, const char *name)
|
|||
return FALSE;
|
||||
}
|
||||
|
||||
htonmemcpy(&value, mCurBufferp, MVT_S32, 4);
|
||||
htolememcpy(&value, mCurBufferp, MVT_S32, 4);
|
||||
mCurBufferp += 4;
|
||||
return TRUE;
|
||||
}
|
||||
|
|
@ -407,7 +407,7 @@ BOOL LLDataPackerBinaryBuffer::packF32(const F32 value, const char *name)
|
|||
|
||||
if (mWriteEnabled)
|
||||
{
|
||||
htonmemcpy(mCurBufferp, &value, MVT_F32, 4);
|
||||
htolememcpy(mCurBufferp, &value, MVT_F32, 4);
|
||||
}
|
||||
mCurBufferp += 4;
|
||||
return TRUE;
|
||||
|
|
@ -421,7 +421,7 @@ BOOL LLDataPackerBinaryBuffer::unpackF32(F32 &value, const char *name)
|
|||
return FALSE;
|
||||
}
|
||||
|
||||
htonmemcpy(&value, mCurBufferp, MVT_F32, 4);
|
||||
htolememcpy(&value, mCurBufferp, MVT_F32, 4);
|
||||
mCurBufferp += 4;
|
||||
return TRUE;
|
||||
}
|
||||
|
|
@ -436,7 +436,7 @@ BOOL LLDataPackerBinaryBuffer::packColor4(const LLColor4 &value, const char *nam
|
|||
|
||||
if (mWriteEnabled)
|
||||
{
|
||||
htonmemcpy(mCurBufferp, value.mV, MVT_LLVector4, 16);
|
||||
htolememcpy(mCurBufferp, value.mV, MVT_LLVector4, 16);
|
||||
}
|
||||
mCurBufferp += 16;
|
||||
return TRUE;
|
||||
|
|
@ -450,7 +450,7 @@ BOOL LLDataPackerBinaryBuffer::unpackColor4(LLColor4 &value, const char *name)
|
|||
return FALSE;
|
||||
}
|
||||
|
||||
htonmemcpy(value.mV, mCurBufferp, MVT_LLVector4, 16);
|
||||
htolememcpy(value.mV, mCurBufferp, MVT_LLVector4, 16);
|
||||
mCurBufferp += 16;
|
||||
return TRUE;
|
||||
}
|
||||
|
|
@ -465,7 +465,7 @@ BOOL LLDataPackerBinaryBuffer::packColor4U(const LLColor4U &value, const char *n
|
|||
|
||||
if (mWriteEnabled)
|
||||
{
|
||||
htonmemcpy(mCurBufferp, value.mV, MVT_VARIABLE, 4);
|
||||
htolememcpy(mCurBufferp, value.mV, MVT_VARIABLE, 4);
|
||||
}
|
||||
mCurBufferp += 4;
|
||||
return TRUE;
|
||||
|
|
@ -479,7 +479,7 @@ BOOL LLDataPackerBinaryBuffer::unpackColor4U(LLColor4U &value, const char *name)
|
|||
return FALSE;
|
||||
}
|
||||
|
||||
htonmemcpy(value.mV, mCurBufferp, MVT_VARIABLE, 4);
|
||||
htolememcpy(value.mV, mCurBufferp, MVT_VARIABLE, 4);
|
||||
mCurBufferp += 4;
|
||||
return TRUE;
|
||||
}
|
||||
|
|
@ -495,8 +495,8 @@ BOOL LLDataPackerBinaryBuffer::packVector2(const LLVector2 &value, const char *n
|
|||
|
||||
if (mWriteEnabled)
|
||||
{
|
||||
htonmemcpy(mCurBufferp, &value.mV[0], MVT_F32, 4);
|
||||
htonmemcpy(mCurBufferp+4, &value.mV[1], MVT_F32, 4);
|
||||
htolememcpy(mCurBufferp, &value.mV[0], MVT_F32, 4);
|
||||
htolememcpy(mCurBufferp+4, &value.mV[1], MVT_F32, 4);
|
||||
}
|
||||
mCurBufferp += 8;
|
||||
return TRUE;
|
||||
|
|
@ -510,8 +510,8 @@ BOOL LLDataPackerBinaryBuffer::unpackVector2(LLVector2 &value, const char *name)
|
|||
return FALSE;
|
||||
}
|
||||
|
||||
htonmemcpy(&value.mV[0], mCurBufferp, MVT_F32, 4);
|
||||
htonmemcpy(&value.mV[1], mCurBufferp+4, MVT_F32, 4);
|
||||
htolememcpy(&value.mV[0], mCurBufferp, MVT_F32, 4);
|
||||
htolememcpy(&value.mV[1], mCurBufferp+4, MVT_F32, 4);
|
||||
mCurBufferp += 8;
|
||||
return TRUE;
|
||||
}
|
||||
|
|
@ -526,7 +526,7 @@ BOOL LLDataPackerBinaryBuffer::packVector3(const LLVector3 &value, const char *n
|
|||
|
||||
if (mWriteEnabled)
|
||||
{
|
||||
htonmemcpy(mCurBufferp, value.mV, MVT_LLVector3, 12);
|
||||
htolememcpy(mCurBufferp, value.mV, MVT_LLVector3, 12);
|
||||
}
|
||||
mCurBufferp += 12;
|
||||
return TRUE;
|
||||
|
|
@ -540,7 +540,7 @@ BOOL LLDataPackerBinaryBuffer::unpackVector3(LLVector3 &value, const char *name)
|
|||
return FALSE;
|
||||
}
|
||||
|
||||
htonmemcpy(value.mV, mCurBufferp, MVT_LLVector3, 12);
|
||||
htolememcpy(value.mV, mCurBufferp, MVT_LLVector3, 12);
|
||||
mCurBufferp += 12;
|
||||
return TRUE;
|
||||
}
|
||||
|
|
@ -554,7 +554,7 @@ BOOL LLDataPackerBinaryBuffer::packVector4(const LLVector4 &value, const char *n
|
|||
|
||||
if (mWriteEnabled)
|
||||
{
|
||||
htonmemcpy(mCurBufferp, value.mV, MVT_LLVector4, 16);
|
||||
htolememcpy(mCurBufferp, value.mV, MVT_LLVector4, 16);
|
||||
}
|
||||
mCurBufferp += 16;
|
||||
return TRUE;
|
||||
|
|
@ -568,7 +568,7 @@ BOOL LLDataPackerBinaryBuffer::unpackVector4(LLVector4 &value, const char *name)
|
|||
return FALSE;
|
||||
}
|
||||
|
||||
htonmemcpy(value.mV, mCurBufferp, MVT_LLVector4, 16);
|
||||
htolememcpy(value.mV, mCurBufferp, MVT_LLVector4, 16);
|
||||
mCurBufferp += 16;
|
||||
return TRUE;
|
||||
}
|
||||
|
|
@ -582,7 +582,7 @@ BOOL LLDataPackerBinaryBuffer::packUUID(const LLUUID &value, const char *name)
|
|||
|
||||
if (mWriteEnabled)
|
||||
{
|
||||
htonmemcpy(mCurBufferp, value.mData, MVT_LLUUID, 16);
|
||||
htolememcpy(mCurBufferp, value.mData, MVT_LLUUID, 16);
|
||||
}
|
||||
mCurBufferp += 16;
|
||||
return TRUE;
|
||||
|
|
@ -596,7 +596,7 @@ BOOL LLDataPackerBinaryBuffer::unpackUUID(LLUUID &value, const char *name)
|
|||
return FALSE;
|
||||
}
|
||||
|
||||
htonmemcpy(value.mData, mCurBufferp, MVT_LLUUID, 16);
|
||||
htolememcpy(value.mData, mCurBufferp, MVT_LLUUID, 16);
|
||||
mCurBufferp += 16;
|
||||
return TRUE;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -373,7 +373,7 @@ std::string LLMail::encryptIMEmailAddress(const LLUUID& from_agent_id,
|
|||
// Convert input data into a binary blob
|
||||
std::vector<U8> data;
|
||||
data.resize(data_size);
|
||||
// *NOTE: This may suffer from endian issues. Could be htonmemcpy.
|
||||
// *NOTE: This may suffer from endian issues. Could be htolememcpy.
|
||||
memcpy(&data[0], &time, 4);
|
||||
memcpy(&data[4], &from_agent_id.mData[0], UUID_BYTES);
|
||||
memcpy(&data[4 + UUID_BYTES], &to_agent_id.mData[0], UUID_BYTES);
|
||||
|
|
|
|||
|
|
@ -47,7 +47,7 @@ void LLMsgVarData::addData(const void *data, S32 size, EMsgVariableType type, S3
|
|||
{
|
||||
delete[] mData; // Delete it if it already exists
|
||||
mData = new U8[size];
|
||||
htonmemcpy(mData, data, mType, size);
|
||||
htolememcpy(mData, data, mType, size);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -689,14 +689,14 @@ static S32 buildBlock(U8* buffer, S32 buffer_size, const LLMessageBlock* templat
|
|||
{
|
||||
case 1:
|
||||
sizeb = size;
|
||||
htonmemcpy(&buffer[result], &sizeb, MVT_U8, 1);
|
||||
htolememcpy(&buffer[result], &sizeb, MVT_U8, 1);
|
||||
break;
|
||||
case 2:
|
||||
sizeh = size;
|
||||
htonmemcpy(&buffer[result], &sizeh, MVT_U16, 2);
|
||||
htolememcpy(&buffer[result], &sizeh, MVT_U16, 2);
|
||||
break;
|
||||
case 4:
|
||||
htonmemcpy(&buffer[result], &size, MVT_S32, 4);
|
||||
htolememcpy(&buffer[result], &size, MVT_S32, 4);
|
||||
break;
|
||||
default:
|
||||
LL_ERRS() << "Attempting to build variable field with unknown size of " << size << LL_ENDL;
|
||||
|
|
|
|||
|
|
@ -647,15 +647,15 @@ BOOL LLTemplateMessageReader::decodeData(const U8* buffer, const LLHost& sender
|
|||
switch(data_size)
|
||||
{
|
||||
case 1:
|
||||
htonmemcpy(&tsizeb, &buffer[decode_pos], MVT_U8, 1);
|
||||
htolememcpy(&tsizeb, &buffer[decode_pos], MVT_U8, 1);
|
||||
tsize = tsizeb;
|
||||
break;
|
||||
case 2:
|
||||
htonmemcpy(&tsizeh, &buffer[decode_pos], MVT_U16, 2);
|
||||
htolememcpy(&tsizeh, &buffer[decode_pos], MVT_U16, 2);
|
||||
tsize = tsizeh;
|
||||
break;
|
||||
case 4:
|
||||
htonmemcpy(&tsize, &buffer[decode_pos], MVT_U32, 4);
|
||||
htolememcpy(&tsize, &buffer[decode_pos], MVT_U32, 4);
|
||||
break;
|
||||
default:
|
||||
LL_ERRS() << "Attempting to read variable field with unknown size of " << data_size << LL_ENDL;
|
||||
|
|
|
|||
|
|
@ -245,7 +245,7 @@ void LLXfer::sendPacket(S32 packet_num)
|
|||
num_copy);
|
||||
}
|
||||
fdata_size += sizeof(S32);
|
||||
htonmemcpy(fdata_buf,&mXferSize, MVT_S32, sizeof(S32));
|
||||
htolememcpy(fdata_buf,&mXferSize, MVT_S32, sizeof(S32));
|
||||
}
|
||||
|
||||
S32 encoded_packetnum = encodePacketNum(packet_num,last_packet);
|
||||
|
|
|
|||
|
|
@ -866,10 +866,10 @@ void null_message_callback(LLMessageSystem *msg, void **data);
|
|||
//
|
||||
|
||||
#if !defined( LL_BIG_ENDIAN ) && !defined( LL_LITTLE_ENDIAN )
|
||||
#error Unknown endianness for htonmemcpy. Did you miss a common include?
|
||||
#error Unknown endianness for htolememcpy. Did you miss a common include?
|
||||
#endif
|
||||
|
||||
static inline void *htonmemcpy(void *vs, const void *vct, EMsgVariableType type, size_t n)
|
||||
static inline void *htolememcpy(void *vs, const void *vct, EMsgVariableType type, size_t n)
|
||||
{
|
||||
char *s = (char *)vs;
|
||||
const char *ct = (const char *)vct;
|
||||
|
|
@ -892,7 +892,7 @@ static inline void *htonmemcpy(void *vs, const void *vct, EMsgVariableType type,
|
|||
case MVT_S16:
|
||||
if (n != 2)
|
||||
{
|
||||
LL_ERRS() << "Size argument passed to htonmemcpy doesn't match swizzle type size" << LL_ENDL;
|
||||
LL_ERRS() << "Size argument passed to htolememcpy doesn't match swizzle type size" << LL_ENDL;
|
||||
}
|
||||
#ifdef LL_BIG_ENDIAN
|
||||
*(s + 1) = *(ct);
|
||||
|
|
@ -907,7 +907,7 @@ static inline void *htonmemcpy(void *vs, const void *vct, EMsgVariableType type,
|
|||
case MVT_F32:
|
||||
if (n != 4)
|
||||
{
|
||||
LL_ERRS() << "Size argument passed to htonmemcpy doesn't match swizzle type size" << LL_ENDL;
|
||||
LL_ERRS() << "Size argument passed to htolememcpy doesn't match swizzle type size" << LL_ENDL;
|
||||
}
|
||||
#ifdef LL_BIG_ENDIAN
|
||||
*(s + 3) = *(ct);
|
||||
|
|
@ -924,7 +924,7 @@ static inline void *htonmemcpy(void *vs, const void *vct, EMsgVariableType type,
|
|||
case MVT_F64:
|
||||
if (n != 8)
|
||||
{
|
||||
LL_ERRS() << "Size argument passed to htonmemcpy doesn't match swizzle type size" << LL_ENDL;
|
||||
LL_ERRS() << "Size argument passed to htolememcpy doesn't match swizzle type size" << LL_ENDL;
|
||||
}
|
||||
#ifdef LL_BIG_ENDIAN
|
||||
*(s + 7) = *(ct);
|
||||
|
|
@ -944,12 +944,12 @@ static inline void *htonmemcpy(void *vs, const void *vct, EMsgVariableType type,
|
|||
case MVT_LLQuaternion: // We only send x, y, z and infer w (we set x, y, z to ensure that w >= 0)
|
||||
if (n != 12)
|
||||
{
|
||||
LL_ERRS() << "Size argument passed to htonmemcpy doesn't match swizzle type size" << LL_ENDL;
|
||||
LL_ERRS() << "Size argument passed to htolememcpy doesn't match swizzle type size" << LL_ENDL;
|
||||
}
|
||||
#ifdef LL_BIG_ENDIAN
|
||||
htonmemcpy(s + 8, ct + 8, MVT_F32, 4);
|
||||
htonmemcpy(s + 4, ct + 4, MVT_F32, 4);
|
||||
return(htonmemcpy(s, ct, MVT_F32, 4));
|
||||
htolememcpy(s + 8, ct + 8, MVT_F32, 4);
|
||||
htolememcpy(s + 4, ct + 4, MVT_F32, 4);
|
||||
return(htolememcpy(s, ct, MVT_F32, 4));
|
||||
#else
|
||||
return(memcpy(s,ct,n)); /* Flawfinder: ignore */
|
||||
#endif
|
||||
|
|
@ -957,12 +957,12 @@ static inline void *htonmemcpy(void *vs, const void *vct, EMsgVariableType type,
|
|||
case MVT_LLVector3d:
|
||||
if (n != 24)
|
||||
{
|
||||
LL_ERRS() << "Size argument passed to htonmemcpy doesn't match swizzle type size" << LL_ENDL;
|
||||
LL_ERRS() << "Size argument passed to htolememcpy doesn't match swizzle type size" << LL_ENDL;
|
||||
}
|
||||
#ifdef LL_BIG_ENDIAN
|
||||
htonmemcpy(s + 16, ct + 16, MVT_F64, 8);
|
||||
htonmemcpy(s + 8, ct + 8, MVT_F64, 8);
|
||||
return(htonmemcpy(s, ct, MVT_F64, 8));
|
||||
htolememcpy(s + 16, ct + 16, MVT_F64, 8);
|
||||
htolememcpy(s + 8, ct + 8, MVT_F64, 8);
|
||||
return(htolememcpy(s, ct, MVT_F64, 8));
|
||||
#else
|
||||
return(memcpy(s,ct,n)); /* Flawfinder: ignore */
|
||||
#endif
|
||||
|
|
@ -970,13 +970,13 @@ static inline void *htonmemcpy(void *vs, const void *vct, EMsgVariableType type,
|
|||
case MVT_LLVector4:
|
||||
if (n != 16)
|
||||
{
|
||||
LL_ERRS() << "Size argument passed to htonmemcpy doesn't match swizzle type size" << LL_ENDL;
|
||||
LL_ERRS() << "Size argument passed to htolememcpy doesn't match swizzle type size" << LL_ENDL;
|
||||
}
|
||||
#ifdef LL_BIG_ENDIAN
|
||||
htonmemcpy(s + 12, ct + 12, MVT_F32, 4);
|
||||
htonmemcpy(s + 8, ct + 8, MVT_F32, 4);
|
||||
htonmemcpy(s + 4, ct + 4, MVT_F32, 4);
|
||||
return(htonmemcpy(s, ct, MVT_F32, 4));
|
||||
htolememcpy(s + 12, ct + 12, MVT_F32, 4);
|
||||
htolememcpy(s + 8, ct + 8, MVT_F32, 4);
|
||||
htolememcpy(s + 4, ct + 4, MVT_F32, 4);
|
||||
return(htolememcpy(s, ct, MVT_F32, 4));
|
||||
#else
|
||||
return(memcpy(s,ct,n)); /* Flawfinder: ignore */
|
||||
#endif
|
||||
|
|
@ -984,12 +984,12 @@ static inline void *htonmemcpy(void *vs, const void *vct, EMsgVariableType type,
|
|||
case MVT_U16Vec3:
|
||||
if (n != 6)
|
||||
{
|
||||
LL_ERRS() << "Size argument passed to htonmemcpy doesn't match swizzle type size" << LL_ENDL;
|
||||
LL_ERRS() << "Size argument passed to htolememcpy doesn't match swizzle type size" << LL_ENDL;
|
||||
}
|
||||
#ifdef LL_BIG_ENDIAN
|
||||
htonmemcpy(s + 4, ct + 4, MVT_U16, 2);
|
||||
htonmemcpy(s + 2, ct + 2, MVT_U16, 2);
|
||||
return(htonmemcpy(s, ct, MVT_U16, 2));
|
||||
htolememcpy(s + 4, ct + 4, MVT_U16, 2);
|
||||
htolememcpy(s + 2, ct + 2, MVT_U16, 2);
|
||||
return(htolememcpy(s, ct, MVT_U16, 2));
|
||||
#else
|
||||
return(memcpy(s,ct,n)); /* Flawfinder: ignore */
|
||||
#endif
|
||||
|
|
@ -997,13 +997,13 @@ static inline void *htonmemcpy(void *vs, const void *vct, EMsgVariableType type,
|
|||
case MVT_U16Quat:
|
||||
if (n != 8)
|
||||
{
|
||||
LL_ERRS() << "Size argument passed to htonmemcpy doesn't match swizzle type size" << LL_ENDL;
|
||||
LL_ERRS() << "Size argument passed to htolememcpy doesn't match swizzle type size" << LL_ENDL;
|
||||
}
|
||||
#ifdef LL_BIG_ENDIAN
|
||||
htonmemcpy(s + 6, ct + 6, MVT_U16, 2);
|
||||
htonmemcpy(s + 4, ct + 4, MVT_U16, 2);
|
||||
htonmemcpy(s + 2, ct + 2, MVT_U16, 2);
|
||||
return(htonmemcpy(s, ct, MVT_U16, 2));
|
||||
htolememcpy(s + 6, ct + 6, MVT_U16, 2);
|
||||
htolememcpy(s + 4, ct + 4, MVT_U16, 2);
|
||||
htolememcpy(s + 2, ct + 2, MVT_U16, 2);
|
||||
return(htolememcpy(s, ct, MVT_U16, 2));
|
||||
#else
|
||||
return(memcpy(s,ct,n)); /* Flawfinder: ignore */
|
||||
#endif
|
||||
|
|
@ -1011,15 +1011,15 @@ static inline void *htonmemcpy(void *vs, const void *vct, EMsgVariableType type,
|
|||
case MVT_S16Array:
|
||||
if (n % 2)
|
||||
{
|
||||
LL_ERRS() << "Size argument passed to htonmemcpy doesn't match swizzle type size" << LL_ENDL;
|
||||
LL_ERRS() << "Size argument passed to htolememcpy doesn't match swizzle type size" << LL_ENDL;
|
||||
}
|
||||
#ifdef LL_BIG_ENDIAN
|
||||
length = n % 2;
|
||||
for (i = 1; i < length; i++)
|
||||
{
|
||||
htonmemcpy(s + i*2, ct + i*2, MVT_S16, 2);
|
||||
htolememcpy(s + i*2, ct + i*2, MVT_S16, 2);
|
||||
}
|
||||
return(htonmemcpy(s, ct, MVT_S16, 2));
|
||||
return(htolememcpy(s, ct, MVT_S16, 2));
|
||||
#else
|
||||
return(memcpy(s,ct,n));
|
||||
#endif
|
||||
|
|
@ -1031,7 +1031,7 @@ static inline void *htonmemcpy(void *vs, const void *vct, EMsgVariableType type,
|
|||
|
||||
inline void *ntohmemcpy(void *s, const void *ct, EMsgVariableType type, size_t n)
|
||||
{
|
||||
return(htonmemcpy(s,ct,type, n));
|
||||
return(htolememcpy(s,ct,type, n));
|
||||
}
|
||||
|
||||
inline const LLHost& LLMessageSystem::getReceivingInterface() const {return mLastReceivingIF;}
|
||||
|
|
|
|||
|
|
@ -33,7 +33,7 @@
|
|||
#include "llpluginmessagepipe.h"
|
||||
#include "llpluginmessageclasses.h"
|
||||
|
||||
static const F32 GOODBYE_SECONDS = 20.0f;
|
||||
static const F32 GOODBYE_SECONDS = 12.0f; // Do not set it to be bigger than mPluginLockupTimeout or parent will kill LLPluginProcessChild
|
||||
static const F32 HEARTBEAT_SECONDS = 1.0f;
|
||||
static const F32 PLUGIN_IDLE_SECONDS = 1.0f / 100.0f; // Each call to idle will give the plugin this much time.
|
||||
|
||||
|
|
@ -218,6 +218,11 @@ void LLPluginProcessChild::idle(void)
|
|||
if (mWaitGoodbye.hasExpired())
|
||||
{
|
||||
LL_WARNS() << "Wait for goodbye expired. Advancing to UNLOADED" << LL_ENDL;
|
||||
if (mInstance != NULL)
|
||||
{
|
||||
// Something went wrong, at least make sure plugin will terminate
|
||||
sendMessageToPlugin(LLPluginMessage("base", "force_exit"));
|
||||
}
|
||||
setState(STATE_UNLOADED);
|
||||
}
|
||||
break;
|
||||
|
|
|
|||
|
|
@ -1026,7 +1026,7 @@ S32 LLPrimitive::packTEField(U8 *cur_ptr, U8 *data_ptr, U8 data_size, U8 last_fa
|
|||
U64 exception_faces;
|
||||
U8 *start_loc = cur_ptr;
|
||||
|
||||
htonmemcpy(cur_ptr,data_ptr + (last_face_index * data_size), type, data_size);
|
||||
htolememcpy(cur_ptr,data_ptr + (last_face_index * data_size), type, data_size);
|
||||
cur_ptr += data_size;
|
||||
|
||||
for (face_index = last_face_index-1; face_index >= 0; face_index--)
|
||||
|
|
@ -1072,7 +1072,7 @@ S32 LLPrimitive::packTEField(U8 *cur_ptr, U8 *data_ptr, U8 data_size, U8 last_fa
|
|||
|
||||
*cur_ptr++ = (U8)(exception_faces & 0x7F);
|
||||
|
||||
htonmemcpy(cur_ptr,data_ptr + (face_index * data_size), type, data_size);
|
||||
htolememcpy(cur_ptr,data_ptr + (face_index * data_size), type, data_size);
|
||||
cur_ptr += data_size;
|
||||
}
|
||||
}
|
||||
|
|
@ -1083,7 +1083,7 @@ S32 LLPrimitive::unpackTEField(U8 *cur_ptr, U8 *buffer_end, U8 *data_ptr, U8 dat
|
|||
{
|
||||
U8 *start_loc = cur_ptr;
|
||||
U64 i;
|
||||
htonmemcpy(data_ptr,cur_ptr, type,data_size);
|
||||
htolememcpy(data_ptr,cur_ptr, type,data_size);
|
||||
cur_ptr += data_size;
|
||||
|
||||
for (i = 1; i < face_count; i++)
|
||||
|
|
@ -1108,7 +1108,7 @@ S32 LLPrimitive::unpackTEField(U8 *cur_ptr, U8 *buffer_end, U8 *data_ptr, U8 dat
|
|||
{
|
||||
if (i & 0x01)
|
||||
{
|
||||
htonmemcpy(data_ptr+(j*data_size),cur_ptr,type,data_size);
|
||||
htolememcpy(data_ptr+(j*data_size),cur_ptr,type,data_size);
|
||||
LL_DEBUGS("TEFieldDecode") << "Assigning " ;
|
||||
char foo[64];
|
||||
sprintf(foo,"%x %x",*(data_ptr+(j*data_size)), *(data_ptr+(j*data_size)+1));
|
||||
|
|
|
|||
|
|
@ -94,9 +94,9 @@ void LLTextureAnim::packTAMessage(LLMessageSystem *mesgsys) const
|
|||
data[1] = mFace;
|
||||
data[2] = mSizeX;
|
||||
data[3] = mSizeY;
|
||||
htonmemcpy(data + 4, &mStart, MVT_F32, sizeof(F32));
|
||||
htonmemcpy(data + 8, &mLength, MVT_F32, sizeof(F32));
|
||||
htonmemcpy(data + 12, &mRate, MVT_F32, sizeof(F32));
|
||||
htolememcpy(data + 4, &mStart, MVT_F32, sizeof(F32));
|
||||
htolememcpy(data + 8, &mLength, MVT_F32, sizeof(F32));
|
||||
htolememcpy(data + 12, &mRate, MVT_F32, sizeof(F32));
|
||||
|
||||
mesgsys->addBinaryDataFast(_PREHASH_TextureAnim, data, TA_BLOCK_SIZE);
|
||||
}
|
||||
|
|
@ -109,9 +109,9 @@ void LLTextureAnim::packTAMessage(LLDataPacker &dp) const
|
|||
data[1] = mFace;
|
||||
data[2] = mSizeX;
|
||||
data[3] = mSizeY;
|
||||
htonmemcpy(data + 4, &mStart, MVT_F32, sizeof(F32));
|
||||
htonmemcpy(data + 8, &mLength, MVT_F32, sizeof(F32));
|
||||
htonmemcpy(data + 12, &mRate, MVT_F32, sizeof(F32));
|
||||
htolememcpy(data + 4, &mStart, MVT_F32, sizeof(F32));
|
||||
htolememcpy(data + 8, &mLength, MVT_F32, sizeof(F32));
|
||||
htolememcpy(data + 12, &mRate, MVT_F32, sizeof(F32));
|
||||
|
||||
dp.packBinaryData(data, TA_BLOCK_SIZE, "TextureAnimation");
|
||||
}
|
||||
|
|
@ -146,9 +146,9 @@ void LLTextureAnim::unpackTAMessage(LLMessageSystem *mesgsys, const S32 block_nu
|
|||
mSizeX = llmax((U8)1, data[2]);
|
||||
mSizeY = llmax((U8)1, data[3]);
|
||||
}
|
||||
htonmemcpy(&mStart, data + 4, MVT_F32, sizeof(F32));
|
||||
htonmemcpy(&mLength, data + 8, MVT_F32, sizeof(F32));
|
||||
htonmemcpy(&mRate, data + 12, MVT_F32, sizeof(F32));
|
||||
htolememcpy(&mStart, data + 4, MVT_F32, sizeof(F32));
|
||||
htolememcpy(&mLength, data + 8, MVT_F32, sizeof(F32));
|
||||
htolememcpy(&mRate, data + 12, MVT_F32, sizeof(F32));
|
||||
}
|
||||
|
||||
void LLTextureAnim::unpackTAMessage(LLDataPacker &dp)
|
||||
|
|
@ -170,9 +170,9 @@ void LLTextureAnim::unpackTAMessage(LLDataPacker &dp)
|
|||
mFace = data[1];
|
||||
mSizeX = data[2];
|
||||
mSizeY = data[3];
|
||||
htonmemcpy(&mStart, data + 4, MVT_F32, sizeof(F32));
|
||||
htonmemcpy(&mLength, data + 8, MVT_F32, sizeof(F32));
|
||||
htonmemcpy(&mRate, data + 12, MVT_F32, sizeof(F32));
|
||||
htolememcpy(&mStart, data + 4, MVT_F32, sizeof(F32));
|
||||
htolememcpy(&mLength, data + 8, MVT_F32, sizeof(F32));
|
||||
htolememcpy(&mRate, data + 12, MVT_F32, sizeof(F32));
|
||||
}
|
||||
|
||||
LLSD LLTextureAnim::asLLSD() const
|
||||
|
|
|
|||
|
|
@ -936,10 +936,16 @@ BOOL LLView::handleToolTip(S32 x, S32 y, MASK mask)
|
|||
F32 timeout = LLToolTipMgr::instance().toolTipVisible()
|
||||
? LLUI::sSettingGroups["config"]->getF32( "ToolTipFastDelay" )
|
||||
: LLUI::sSettingGroups["config"]->getF32( "ToolTipDelay" );
|
||||
LLToolTipMgr::instance().show(LLToolTip::Params()
|
||||
.message(tooltip)
|
||||
.sticky_rect(calcScreenRect())
|
||||
.delay_time(timeout));
|
||||
|
||||
// Even if we don't show tooltips, consume the event, nothing below should show tooltip
|
||||
bool allow_ui_tooltips = LLUI::sSettingGroups["config"]->getBOOL( "BasicUITooltips" );
|
||||
if (allow_ui_tooltips)
|
||||
{
|
||||
LLToolTipMgr::instance().show(LLToolTip::Params()
|
||||
.message(tooltip)
|
||||
.sticky_rect(calcScreenRect())
|
||||
.delay_time(timeout));
|
||||
}
|
||||
handled = TRUE;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -38,6 +38,10 @@ BOOL LLMouseHandler::handleAnyMouseClick(S32 x, S32 y, MASK mask, EClickType cli
|
|||
case CLICK_RIGHT: handled = handleRightMouseDown(x, y, mask); break;
|
||||
case CLICK_MIDDLE: handled = handleMiddleMouseDown(x, y, mask); break;
|
||||
case CLICK_DOUBLELEFT: handled = handleDoubleClick(x, y, mask); break;
|
||||
case CLICK_BUTTON4:
|
||||
case CLICK_BUTTON5:
|
||||
LL_INFOS() << "Handle mouse button " << clicktype + 1 << " down." << LL_ENDL;
|
||||
break;
|
||||
default:
|
||||
LL_WARNS() << "Unhandled enum." << LL_ENDL;
|
||||
}
|
||||
|
|
@ -50,6 +54,10 @@ BOOL LLMouseHandler::handleAnyMouseClick(S32 x, S32 y, MASK mask, EClickType cli
|
|||
case CLICK_RIGHT: handled = handleRightMouseUp(x, y, mask); break;
|
||||
case CLICK_MIDDLE: handled = handleMiddleMouseUp(x, y, mask); break;
|
||||
case CLICK_DOUBLELEFT: handled = handleDoubleClick(x, y, mask); break;
|
||||
case CLICK_BUTTON4:
|
||||
case CLICK_BUTTON5:
|
||||
LL_INFOS() << "Handle mouse button " << clicktype + 1 << " up." << LL_ENDL;
|
||||
break;
|
||||
default:
|
||||
LL_WARNS() << "Unhandled enum." << LL_ENDL;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -50,6 +50,8 @@ public:
|
|||
CLICK_LEFT,
|
||||
CLICK_MIDDLE,
|
||||
CLICK_RIGHT,
|
||||
CLICK_BUTTON4,
|
||||
CLICK_BUTTON5,
|
||||
CLICK_DOUBLELEFT
|
||||
} EClickType;
|
||||
|
||||
|
|
|
|||
|
|
@ -454,7 +454,7 @@ attributedStringInfo getSegments(NSAttributedString *str)
|
|||
NSPoint mPoint = gHiDPISupport ? [self convertPointToBacking:[theEvent locationInWindow]] : [theEvent locationInWindow];
|
||||
mMousePos[0] = mPoint.x;
|
||||
mMousePos[1] = mPoint.y;
|
||||
callMiddleMouseDown(mMousePos, [theEvent modifierFlags]);
|
||||
callOtherMouseDown(mMousePos, [theEvent modifierFlags], [theEvent buttonNumber]);
|
||||
}
|
||||
|
||||
- (void) otherMouseUp:(NSEvent *)theEvent
|
||||
|
|
@ -462,7 +462,7 @@ attributedStringInfo getSegments(NSAttributedString *str)
|
|||
NSPoint mPoint = gHiDPISupport ? [self convertPointToBacking:[theEvent locationInWindow]] : [theEvent locationInWindow];
|
||||
mMousePos[0] = mPoint.x;
|
||||
mMousePos[1] = mPoint.y;
|
||||
callMiddleMouseUp(mMousePos, [theEvent modifierFlags]);
|
||||
callOtherMouseUp(mMousePos, [theEvent modifierFlags], [theEvent buttonNumber]);
|
||||
}
|
||||
|
||||
- (void) rightMouseDragged:(NSEvent *)theEvent
|
||||
|
|
|
|||
|
|
@ -98,6 +98,16 @@ BOOL LLWindowCallbacks::handleMiddleMouseUp(LLWindow *window, const LLCoordGL po
|
|||
return FALSE;
|
||||
}
|
||||
|
||||
BOOL LLWindowCallbacks::handleOtherMouseDown(LLWindow *window, const LLCoordGL pos, MASK mask, S32 button)
|
||||
{
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
BOOL LLWindowCallbacks::handleOtherMouseUp(LLWindow *window, const LLCoordGL pos, MASK mask, S32 button)
|
||||
{
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
BOOL LLWindowCallbacks::handleActivate(LLWindow *window, BOOL activated)
|
||||
{
|
||||
return FALSE;
|
||||
|
|
|
|||
|
|
@ -49,6 +49,8 @@ public:
|
|||
virtual BOOL handleRightMouseUp(LLWindow *window, LLCoordGL pos, MASK mask);
|
||||
virtual BOOL handleMiddleMouseDown(LLWindow *window, LLCoordGL pos, MASK mask);
|
||||
virtual BOOL handleMiddleMouseUp(LLWindow *window, LLCoordGL pos, MASK mask);
|
||||
virtual BOOL handleOtherMouseDown(LLWindow *window, LLCoordGL pos, MASK mask, S32 button);
|
||||
virtual BOOL handleOtherMouseUp(LLWindow *window, LLCoordGL pos, MASK mask, S32 button);
|
||||
virtual BOOL handleActivate(LLWindow *window, BOOL activated);
|
||||
virtual BOOL handleActivateApp(LLWindow *window, BOOL activating);
|
||||
virtual void handleMouseMove(LLWindow *window, LLCoordGL pos, MASK mask);
|
||||
|
|
|
|||
|
|
@ -151,8 +151,8 @@ void callWindowHide();
|
|||
void callWindowUnhide();
|
||||
void callWindowDidChangeScreen();
|
||||
void callDeltaUpdate(float *delta, unsigned int mask);
|
||||
void callMiddleMouseDown(float *pos, unsigned int mask);
|
||||
void callMiddleMouseUp(float *pos, unsigned int mask);
|
||||
void callOtherMouseDown(float *pos, unsigned int mask, int button);
|
||||
void callOtherMouseUp(float *pos, unsigned int mask, int button);
|
||||
void callFocus();
|
||||
void callFocusLost();
|
||||
void callModifier(unsigned int mask);
|
||||
|
|
|
|||
|
|
@ -426,7 +426,7 @@ void callDeltaUpdate(float *delta, MASK mask)
|
|||
gWindowImplementation->updateMouseDeltas(delta);
|
||||
}
|
||||
|
||||
void callMiddleMouseDown(float *pos, MASK mask)
|
||||
void callOtherMouseDown(float *pos, MASK mask, int button)
|
||||
{
|
||||
LLCoordGL outCoords;
|
||||
outCoords.mX = ll_round(pos[0]);
|
||||
|
|
@ -435,10 +435,18 @@ void callMiddleMouseDown(float *pos, MASK mask)
|
|||
gWindowImplementation->getMouseDeltas(deltas);
|
||||
outCoords.mX += deltas[0];
|
||||
outCoords.mY += deltas[1];
|
||||
gWindowImplementation->getCallbacks()->handleMiddleMouseDown(gWindowImplementation, outCoords, mask);
|
||||
|
||||
if (button == 2)
|
||||
{
|
||||
gWindowImplementation->getCallbacks()->handleMiddleMouseDown(gWindowImplementation, outCoords, mask);
|
||||
}
|
||||
else
|
||||
{
|
||||
gWindowImplementation->getCallbacks()->handleOtherMouseDown(gWindowImplementation, outCoords, mask, button + 1);
|
||||
}
|
||||
}
|
||||
|
||||
void callMiddleMouseUp(float *pos, MASK mask)
|
||||
void callOtherMouseUp(float *pos, MASK mask, int button)
|
||||
{
|
||||
LLCoordGL outCoords;
|
||||
outCoords.mX = ll_round(pos[0]);
|
||||
|
|
@ -446,8 +454,15 @@ void callMiddleMouseUp(float *pos, MASK mask)
|
|||
float deltas[2];
|
||||
gWindowImplementation->getMouseDeltas(deltas);
|
||||
outCoords.mX += deltas[0];
|
||||
outCoords.mY += deltas[1];
|
||||
gWindowImplementation->getCallbacks()->handleMiddleMouseUp(gWindowImplementation, outCoords, mask);
|
||||
outCoords.mY += deltas[1];
|
||||
if (button == 2)
|
||||
{
|
||||
gWindowImplementation->getCallbacks()->handleMiddleMouseUp(gWindowImplementation, outCoords, mask);
|
||||
}
|
||||
else
|
||||
{
|
||||
gWindowImplementation->getCallbacks()->handleOtherMouseUp(gWindowImplementation, outCoords, mask, button + 1);
|
||||
}
|
||||
}
|
||||
|
||||
void callModifier(MASK mask)
|
||||
|
|
|
|||
|
|
@ -2558,6 +2558,72 @@ LRESULT CALLBACK LLWindowWin32::mainWindowProc(HWND h_wnd, UINT u_msg, WPARAM w_
|
|||
}
|
||||
}
|
||||
break;
|
||||
case WM_XBUTTONDOWN:
|
||||
{
|
||||
window_imp->mCallbacks->handlePingWatchdog(window_imp, "Main:WM_MBUTTONDOWN");
|
||||
LL_RECORD_BLOCK_TIME(FTM_MOUSEHANDLER);
|
||||
S32 button = GET_XBUTTON_WPARAM(w_param);
|
||||
if (LLWinImm::isAvailable() && window_imp->mPreeditor)
|
||||
{
|
||||
window_imp->interruptLanguageTextInput();
|
||||
}
|
||||
|
||||
// Because we move the cursor position in tllviewerhe app, we need to query
|
||||
// to find out where the cursor at the time the event is handled.
|
||||
// If we don't do this, many clicks could get buffered up, and if the
|
||||
// first click changes the cursor position, all subsequent clicks
|
||||
// will occur at the wrong location. JC
|
||||
if (window_imp->mMousePositionModified)
|
||||
{
|
||||
LLCoordWindow cursor_coord_window;
|
||||
window_imp->getCursorPosition(&cursor_coord_window);
|
||||
gl_coord = cursor_coord_window.convert();
|
||||
}
|
||||
else
|
||||
{
|
||||
gl_coord = window_coord.convert();
|
||||
}
|
||||
MASK mask = gKeyboard->currentMask(TRUE);
|
||||
// generate move event to update mouse coordinates
|
||||
window_imp->mCallbacks->handleMouseMove(window_imp, gl_coord, mask);
|
||||
// Windows uses numbers 1 and 2 for buttons, remap to 4, 5
|
||||
if (window_imp->mCallbacks->handleOtherMouseDown(window_imp, gl_coord, mask, button + 3))
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
case WM_XBUTTONUP:
|
||||
{
|
||||
window_imp->mCallbacks->handlePingWatchdog(window_imp, "Main:WM_MBUTTONUP");
|
||||
LL_RECORD_BLOCK_TIME(FTM_MOUSEHANDLER);
|
||||
S32 button = GET_XBUTTON_WPARAM(w_param);
|
||||
// Because we move the cursor position in the llviewer app, we need to query
|
||||
// to find out where the cursor at the time the event is handled.
|
||||
// If we don't do this, many clicks could get buffered up, and if the
|
||||
// first click changes the cursor position, all subsequent clicks
|
||||
// will occur at the wrong location. JC
|
||||
if (window_imp->mMousePositionModified)
|
||||
{
|
||||
LLCoordWindow cursor_coord_window;
|
||||
window_imp->getCursorPosition(&cursor_coord_window);
|
||||
gl_coord = cursor_coord_window.convert();
|
||||
}
|
||||
else
|
||||
{
|
||||
gl_coord = window_coord.convert();
|
||||
}
|
||||
MASK mask = gKeyboard->currentMask(TRUE);
|
||||
// generate move event to update mouse coordinates
|
||||
window_imp->mCallbacks->handleMouseMove(window_imp, gl_coord, mask);
|
||||
// Windows uses numbers 1 and 2 for buttons, remap to 4, 5
|
||||
if (window_imp->mCallbacks->handleOtherMouseUp(window_imp, gl_coord, mask, button + 3))
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
case WM_MOUSEWHEEL:
|
||||
{
|
||||
|
|
|
|||
|
|
@ -72,6 +72,7 @@ private:
|
|||
bool onHTTPAuthCallback(const std::string host, const std::string realm, std::string& username, std::string& password);
|
||||
void onCursorChangedCallback(dullahan::ECursorType type);
|
||||
const std::vector<std::string> onFileDialog(dullahan::EFileDialogType dialog_type, const std::string dialog_title, const std::string default_file, const std::string dialog_accept_filter, bool& use_default);
|
||||
bool onJSDialogCallback(const std::string origin_url, const std::string message_text, const std::string default_prompt_text);
|
||||
|
||||
void postDebugMessage(const std::string& msg);
|
||||
void authResponse(LLPluginMessage &message);
|
||||
|
|
@ -249,6 +250,7 @@ void MediaPluginCEF::onRequestExitCallback()
|
|||
LLPluginMessage message("base", "goodbye");
|
||||
sendMessage(message);
|
||||
|
||||
// Will trigger delete on next staticReceiveMessage()
|
||||
mDeleteMe = true;
|
||||
}
|
||||
|
||||
|
|
@ -362,6 +364,14 @@ const std::vector<std::string> MediaPluginCEF::onFileDialog(dullahan::EFileDialo
|
|||
return std::vector<std::string>();
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
bool MediaPluginCEF::onJSDialogCallback(const std::string origin_url, const std::string message_text, const std::string default_prompt_text)
|
||||
{
|
||||
// return true indicates we suppress the JavaScript alert UI entirely
|
||||
return true;
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
void MediaPluginCEF::onCursorChangedCallback(dullahan::ECursorType type)
|
||||
|
|
@ -445,9 +455,13 @@ void MediaPluginCEF::receiveMessage(const char* message_string)
|
|||
}
|
||||
else if (message_name == "cleanup")
|
||||
{
|
||||
mVolumeCatcher.setVolume(0);
|
||||
mVolumeCatcher.setVolume(0); // Hack: masks CEF exit issues
|
||||
mCEFLib->requestExit();
|
||||
}
|
||||
else if (message_name == "force_exit")
|
||||
{
|
||||
mDeleteMe = true;
|
||||
}
|
||||
else if (message_name == "shm_added")
|
||||
{
|
||||
SharedSegmentInfo info;
|
||||
|
|
@ -504,6 +518,7 @@ void MediaPluginCEF::receiveMessage(const char* message_string)
|
|||
mCEFLib->setOnFileDialogCallback(std::bind(&MediaPluginCEF::onFileDialog, this, std::placeholders::_1, std::placeholders::_2, std::placeholders::_3, std::placeholders::_4, std::placeholders::_5));
|
||||
mCEFLib->setOnCursorChangedCallback(std::bind(&MediaPluginCEF::onCursorChangedCallback, this, std::placeholders::_1));
|
||||
mCEFLib->setOnRequestExitCallback(std::bind(&MediaPluginCEF::onRequestExitCallback, this));
|
||||
mCEFLib->setOnJSDialogCallback(std::bind(&MediaPluginCEF::onJSDialogCallback, this, std::placeholders::_1, std::placeholders::_2, std::placeholders::_3));
|
||||
|
||||
dullahan::dullahan_settings settings;
|
||||
settings.accept_language_list = mHostLanguage;
|
||||
|
|
|
|||
|
|
@ -128,6 +128,10 @@ void mediaPluginExample::receiveMessage(const char* message_string)
|
|||
|
||||
mDeleteMe = true;
|
||||
}
|
||||
else if (message_name == "force_exit")
|
||||
{
|
||||
mDeleteMe = true;
|
||||
}
|
||||
else if (message_name == "shm_added")
|
||||
{
|
||||
SharedSegmentInfo info;
|
||||
|
|
|
|||
|
|
@ -495,6 +495,10 @@ void MediaPluginLibVLC::receiveMessage(const char* message_string)
|
|||
{
|
||||
resetVLC();
|
||||
}
|
||||
else if (message_name == "force_exit")
|
||||
{
|
||||
mDeleteMe = true;
|
||||
}
|
||||
else if (message_name == "shm_added")
|
||||
{
|
||||
SharedSegmentInfo info;
|
||||
|
|
|
|||
|
|
@ -14174,6 +14174,17 @@ Change of this parameter will affect the layout of buttons in notification toast
|
|||
<key>Value</key>
|
||||
<integer>0</integer>
|
||||
</map>
|
||||
<key>BasicUITooltips</key>
|
||||
<map>
|
||||
<key>Comment</key>
|
||||
<string>Show tooltips for various 2D UI elements like buttons or checkboxes, won't supress tooltips like drag'n'drop, inworld, links or media</string>
|
||||
<key>Persist</key>
|
||||
<integer>1</integer>
|
||||
<key>Type</key>
|
||||
<string>Boolean</string>
|
||||
<key>Value</key>
|
||||
<integer>1</integer>
|
||||
</map>
|
||||
<key>ShowHoverTips</key>
|
||||
<map>
|
||||
<key>Comment</key>
|
||||
|
|
@ -16200,6 +16211,17 @@ Change of this parameter will affect the layout of buttons in notification toast
|
|||
<key>Value</key>
|
||||
<real>1.0</real>
|
||||
</map>
|
||||
<key>HUDScaleFactor</key>
|
||||
<map>
|
||||
<key>Comment</key>
|
||||
<string>Scale of HUD attachments</string>
|
||||
<key>Persist</key>
|
||||
<integer>1</integer>
|
||||
<key>Type</key>
|
||||
<string>F32</string>
|
||||
<key>Value</key>
|
||||
<real>1.0</real>
|
||||
</map>
|
||||
<key>UIScaleFactor</key>
|
||||
<map>
|
||||
<key>Comment</key>
|
||||
|
|
|
|||
|
|
@ -1166,18 +1166,18 @@ void FSFloaterImport::setPrimPosition(U8 type, LLViewerObject* object, LLVector3
|
|||
|
||||
if (type & UPD_POSITION)
|
||||
{
|
||||
htonmemcpy(&data[offset], &(position.mV), MVT_LLVector3, 12);
|
||||
htolememcpy(&data[offset], &(position.mV), MVT_LLVector3, 12);
|
||||
offset += 12;
|
||||
}
|
||||
if (type & UPD_ROTATION)
|
||||
{
|
||||
LLVector3 vec = rotation.packToVector3();
|
||||
htonmemcpy(&data[offset], &(vec.mV), MVT_LLQuaternion, 12);
|
||||
htolememcpy(&data[offset], &(vec.mV), MVT_LLQuaternion, 12);
|
||||
offset += 12;
|
||||
}
|
||||
if (type & UPD_SCALE)
|
||||
{
|
||||
htonmemcpy(&data[offset], &(scale.mV), MVT_LLVector3, 12);
|
||||
htolememcpy(&data[offset], &(scale.mV), MVT_LLVector3, 12);
|
||||
offset += 12;
|
||||
}
|
||||
gMessageSystem->addBinaryDataFast(_PREHASH_Data, data, offset);
|
||||
|
|
|
|||
|
|
@ -1110,8 +1110,8 @@ void FSLSLBridge::setupBridgePrim(LLViewerObject* object)
|
|||
gAgentAvatarp->clampAttachmentPositions();
|
||||
|
||||
U8 data[24];
|
||||
htonmemcpy(&data[0], &(object->getPosition().mV), MVT_LLVector3, 12);
|
||||
htonmemcpy(&data[12], &(object->getScale().mV), MVT_LLVector3, 12);
|
||||
htolememcpy(&data[0], &(object->getPosition().mV), MVT_LLVector3, 12);
|
||||
htolememcpy(&data[12], &(object->getScale().mV), MVT_LLVector3, 12);
|
||||
|
||||
gMessageSystem->newMessage("MultipleObjectUpdate");
|
||||
gMessageSystem->nextBlockFast(_PREHASH_AgentData);
|
||||
|
|
|
|||
|
|
@ -74,10 +74,6 @@ BOOL LLFloaterExperiences::postBuild()
|
|||
getChild<LLTabContainer>("xp_tabs")->addTabPanel(new LLPanelExperienceLog());
|
||||
resizeToTabs();
|
||||
|
||||
|
||||
LLEventPumps::instance().obtain("experience_permission").listen("LLFloaterExperiences",
|
||||
boost::bind(&LLFloaterExperiences::updatePermissions, this, _1));
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
|
|
@ -163,6 +159,10 @@ void LLFloaterExperiences::refreshContents()
|
|||
|
||||
void LLFloaterExperiences::onOpen( const LLSD& key )
|
||||
{
|
||||
LLEventPumps::instance().obtain("experience_permission").stopListening("LLFloaterExperiences");
|
||||
LLEventPumps::instance().obtain("experience_permission").listen("LLFloaterExperiences",
|
||||
boost::bind(&LLFloaterExperiences::updatePermissions, this, _1));
|
||||
|
||||
LLViewerRegion* region = gAgent.getRegion();
|
||||
if(region)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -41,6 +41,7 @@
|
|||
#include "llkeyboard.h"
|
||||
#include "llmenugl.h"
|
||||
#include "llmultigesture.h"
|
||||
#include "llnotificationsutil.h"
|
||||
#include "llpreviewgesture.h"
|
||||
#include "llscrolllistctrl.h"
|
||||
#include "lltrans.h"
|
||||
|
|
@ -125,6 +126,7 @@ LLFloaterGesture::LLFloaterGesture(const LLSD& key)
|
|||
mCommitCallbackRegistrar.add("Gesture.Action.ShowPreview", boost::bind(&LLFloaterGesture::onClickEdit, this));
|
||||
mCommitCallbackRegistrar.add("Gesture.Action.CopyPaste", boost::bind(&LLFloaterGesture::onCopyPasteAction, this, _2));
|
||||
mCommitCallbackRegistrar.add("Gesture.Action.SaveToCOF", boost::bind(&LLFloaterGesture::addToCurrentOutFit, this));
|
||||
mCommitCallbackRegistrar.add("Gesture.Action.Rename", boost::bind(&LLFloaterGesture::onRenameSelected, this));
|
||||
mCommitCallbackRegistrar.add("Gesture.Action.RefreshList", boost::bind(&LLFloaterGesture::refreshForActiveSort, this)); // <FS:PP> FIRE-5646: Option to show only active gestures
|
||||
|
||||
mEnableCallbackRegistrar.add("Gesture.EnableAction", boost::bind(&LLFloaterGesture::isActionEnabled, this, _2));
|
||||
|
|
@ -471,6 +473,19 @@ bool LLFloaterGesture::isActionEnabled(const LLSD& command)
|
|||
{
|
||||
return mGestureList->getAllSelected().size() == 1;
|
||||
}
|
||||
else if ("rename_gesture" == command_name)
|
||||
{
|
||||
if (mGestureList->getAllSelected().size() == 1)
|
||||
{
|
||||
LLViewerInventoryItem* item = gInventory.getItem(mGestureList->getCurrentID());
|
||||
|
||||
if (item && item->getPermissions().allowModifyBy(gAgentID))
|
||||
{
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
|
|
@ -555,6 +570,44 @@ void LLFloaterGesture::onActivateBtnClick()
|
|||
}
|
||||
}
|
||||
|
||||
void LLFloaterGesture::onRenameSelected()
|
||||
{
|
||||
LLViewerInventoryItem* gesture = gInventory.getItem(mGestureList->getCurrentID());
|
||||
if (!gesture)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
LLSD args;
|
||||
args["NAME"] = gesture->getName();
|
||||
|
||||
LLSD payload;
|
||||
payload["gesture_id"] = mGestureList->getCurrentID();
|
||||
|
||||
LLNotificationsUtil::add("RenameGesture", args, payload, boost::bind(onGestureRename, _1, _2));
|
||||
|
||||
}
|
||||
|
||||
void LLFloaterGesture::onGestureRename(const LLSD& notification, const LLSD& response)
|
||||
{
|
||||
S32 option = LLNotificationsUtil::getSelectedOption(notification, response);
|
||||
if (option != 0) return; // canceled
|
||||
|
||||
std::string new_name = response["new_name"].asString();
|
||||
LLInventoryObject::correctInventoryName(new_name);
|
||||
if (!new_name.empty())
|
||||
{
|
||||
LLUUID item_id = notification["payload"]["gesture_id"].asUUID();
|
||||
LLViewerInventoryItem* gesture = gInventory.getItem(item_id);
|
||||
if (gesture && (gesture->getName() != new_name))
|
||||
{
|
||||
LLSD updates;
|
||||
updates["name"] = new_name;
|
||||
update_inventory_item(item_id, updates, NULL);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void LLFloaterGesture::onCopyPasteAction(const LLSD& command)
|
||||
{
|
||||
std::string command_name = command.asString();
|
||||
|
|
|
|||
|
|
@ -96,6 +96,9 @@ private:
|
|||
void onCommitList();
|
||||
void onCopyPasteAction(const LLSD& command);
|
||||
void onDeleteSelected();
|
||||
void onRenameSelected();
|
||||
|
||||
static void onGestureRename(const LLSD& notification, const LLSD& response);
|
||||
|
||||
LLUUID mSelectedID;
|
||||
LLUUID mGestureFolderID;
|
||||
|
|
|
|||
|
|
@ -175,7 +175,9 @@ char const* const VISIBILITY_DEFAULT = "default";
|
|||
char const* const VISIBILITY_HIDDEN = "hidden";
|
||||
|
||||
//control value for middle mouse as talk2push button
|
||||
const static std::string MIDDLE_MOUSE_CV = "MiddleMouse";
|
||||
const static std::string MIDDLE_MOUSE_CV = "MiddleMouse"; // for voice client and redability
|
||||
const static std::string MOUSE_BUTTON_4_CV = "MouseButton4";
|
||||
const static std::string MOUSE_BUTTON_5_CV = "MouseButton5";
|
||||
|
||||
/// This must equal the maximum value set for the IndirectMaxComplexity slider in panel_preferences_graphics1.xml
|
||||
static const U32 INDIRECT_MAX_ARC_OFF = 101; // all the way to the right == disabled
|
||||
|
|
@ -219,6 +221,7 @@ public:
|
|||
void setParent(LLFloaterPreference* parent) { mParent = parent; }
|
||||
|
||||
BOOL handleKeyHere(KEY key, MASK mask);
|
||||
BOOL handleAnyMouseClick(S32 x, S32 y, MASK mask, LLMouseHandler::EClickType clicktype, BOOL down);
|
||||
static void onCancel(void* user_data);
|
||||
|
||||
private:
|
||||
|
|
@ -262,6 +265,25 @@ BOOL LLVoiceSetKeyDialog::handleKeyHere(KEY key, MASK mask)
|
|||
return result;
|
||||
}
|
||||
|
||||
BOOL LLVoiceSetKeyDialog::handleAnyMouseClick(S32 x, S32 y, MASK mask, LLMouseHandler::EClickType clicktype, BOOL down)
|
||||
{
|
||||
BOOL result = FALSE;
|
||||
if (down
|
||||
&& (clicktype == LLMouseHandler::CLICK_MIDDLE || clicktype == LLMouseHandler::CLICK_BUTTON4 || clicktype == LLMouseHandler::CLICK_BUTTON5)
|
||||
&& mask == 0)
|
||||
{
|
||||
mParent->setMouse(clicktype);
|
||||
result = TRUE;
|
||||
closeFloater();
|
||||
}
|
||||
else
|
||||
{
|
||||
result = LLMouseHandler::handleAnyMouseClick(x, y, mask, clicktype, down);
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
//static
|
||||
void LLVoiceSetKeyDialog::onCancel(void* user_data)
|
||||
{
|
||||
|
|
@ -2843,6 +2865,41 @@ void LLFloaterPreference::setKey(KEY key)
|
|||
getChild<LLUICtrl>("modifier_combo")->onCommit();
|
||||
}
|
||||
|
||||
void LLFloaterPreference::setMouse(LLMouseHandler::EClickType click)
|
||||
{
|
||||
std::string bt_name;
|
||||
std::string ctrl_value;
|
||||
switch (click)
|
||||
{
|
||||
case LLMouseHandler::CLICK_MIDDLE:
|
||||
bt_name = "middle_mouse";
|
||||
ctrl_value = MIDDLE_MOUSE_CV;
|
||||
break;
|
||||
case LLMouseHandler::CLICK_BUTTON4:
|
||||
bt_name = "button4_mouse";
|
||||
ctrl_value = MOUSE_BUTTON_4_CV;
|
||||
break;
|
||||
case LLMouseHandler::CLICK_BUTTON5:
|
||||
bt_name = "button5_mouse";
|
||||
ctrl_value = MOUSE_BUTTON_5_CV;
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
if (!ctrl_value.empty())
|
||||
{
|
||||
LLUICtrl* p2t_line_editor = getChild<LLUICtrl>("modifier_combo");
|
||||
// We are using text control names for readability and compatibility with voice
|
||||
p2t_line_editor->setControlValue(ctrl_value);
|
||||
LLPanel* advanced_preferences = dynamic_cast<LLPanel*>(p2t_line_editor->getParent());
|
||||
if (advanced_preferences)
|
||||
{
|
||||
p2t_line_editor->setValue(advanced_preferences->getString(bt_name));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void LLFloaterPreference::onClickSetMiddleMouse()
|
||||
{
|
||||
LLUICtrl* p2t_line_editor = getChild<LLUICtrl>("modifier_combo");
|
||||
|
|
@ -3839,10 +3896,19 @@ BOOL LLPanelPreference::postBuild()
|
|||
if (hasChild("modifier_combo", TRUE))
|
||||
{
|
||||
//localizing if push2talk button is set to middle mouse
|
||||
if (MIDDLE_MOUSE_CV == getChild<LLUICtrl>("modifier_combo")->getValue().asString())
|
||||
std::string modifier_value = getChild<LLUICtrl>("modifier_combo")->getValue().asString();
|
||||
if (MIDDLE_MOUSE_CV == modifier_value)
|
||||
{
|
||||
getChild<LLUICtrl>("modifier_combo")->setValue(getString("middle_mouse"));
|
||||
}
|
||||
else if (MOUSE_BUTTON_4_CV == modifier_value)
|
||||
{
|
||||
getChild<LLUICtrl>("modifier_combo")->setValue(getString("button4_mouse"));
|
||||
}
|
||||
else if (MOUSE_BUTTON_5_CV == modifier_value)
|
||||
{
|
||||
getChild<LLUICtrl>("modifier_combo")->setValue(getString("button5_mouse"));
|
||||
}
|
||||
}
|
||||
// Panel Setup (Network) -WoLf
|
||||
if (hasChild("connection_port_enabled"))
|
||||
|
|
|
|||
|
|
@ -195,6 +195,7 @@ public:
|
|||
void onClickSetKey();
|
||||
void onClickClearKey(); // <FS:Ansariel> FIRE-3803: Clear voice toggle button
|
||||
void setKey(KEY key);
|
||||
void setMouse(LLMouseHandler::EClickType click);
|
||||
void onClickSetMiddleMouse();
|
||||
// void onClickSetSounds(); //<FS:KC> Handled centrally now
|
||||
void onClickPreviewUISound(const LLSD& ui_sound_id); // <FS:PP> FIRE-8190: Preview function for "UI Sounds" Panel
|
||||
|
|
|
|||
|
|
@ -92,7 +92,7 @@ public:
|
|||
}
|
||||
virtual void changed(U32 mask);
|
||||
private:
|
||||
LLFloaterProperties* mFloater;
|
||||
LLFloaterProperties* mFloater; // Not a handle because LLFloaterProperties is managing LLPropertiesObserver
|
||||
};
|
||||
|
||||
void LLPropertiesObserver::changed(U32 mask)
|
||||
|
|
|
|||
|
|
@ -110,7 +110,7 @@ void LLHUDEffectBeam::packData(LLMessageSystem *mesgsys)
|
|||
memset(packed_data, 0, 41);
|
||||
if (mSourceObject)
|
||||
{
|
||||
htonmemcpy(packed_data, mSourceObject->mID.mData, MVT_LLUUID, 16);
|
||||
htolememcpy(packed_data, mSourceObject->mID.mData, MVT_LLUUID, 16);
|
||||
}
|
||||
|
||||
if (mTargetObject)
|
||||
|
|
@ -124,11 +124,11 @@ void LLHUDEffectBeam::packData(LLMessageSystem *mesgsys)
|
|||
|
||||
if (mTargetObject)
|
||||
{
|
||||
htonmemcpy(&(packed_data[17]), mTargetObject->mID.mData, MVT_LLUUID, 16);
|
||||
htolememcpy(&(packed_data[17]), mTargetObject->mID.mData, MVT_LLUUID, 16);
|
||||
}
|
||||
else
|
||||
{
|
||||
htonmemcpy(&(packed_data[17]), mTargetPos.mdV, MVT_LLVector3d, 24);
|
||||
htolememcpy(&(packed_data[17]), mTargetPos.mdV, MVT_LLVector3d, 24);
|
||||
}
|
||||
mesgsys->addBinaryDataFast(_PREHASH_TypeData, packed_data, 41);
|
||||
}
|
||||
|
|
@ -151,7 +151,7 @@ void LLHUDEffectBeam::unpackData(LLMessageSystem *mesgsys, S32 blocknum)
|
|||
}
|
||||
mesgsys->getBinaryDataFast(_PREHASH_Effect, _PREHASH_TypeData, packed_data, 41, blocknum);
|
||||
|
||||
htonmemcpy(source_id.mData, packed_data, MVT_LLUUID, 16);
|
||||
htolememcpy(source_id.mData, packed_data, MVT_LLUUID, 16);
|
||||
|
||||
LLViewerObject *objp = gObjectList.findObject(source_id);
|
||||
if (objp)
|
||||
|
|
@ -163,7 +163,7 @@ void LLHUDEffectBeam::unpackData(LLMessageSystem *mesgsys, S32 blocknum)
|
|||
|
||||
if (use_target_object)
|
||||
{
|
||||
htonmemcpy(target_id.mData, &packed_data[17], MVT_LLUUID, 16);
|
||||
htolememcpy(target_id.mData, &packed_data[17], MVT_LLUUID, 16);
|
||||
|
||||
LLViewerObject *objp = gObjectList.findObject(target_id);
|
||||
if (objp)
|
||||
|
|
@ -173,7 +173,7 @@ void LLHUDEffectBeam::unpackData(LLMessageSystem *mesgsys, S32 blocknum)
|
|||
}
|
||||
else
|
||||
{
|
||||
htonmemcpy(new_target.mdV, &(packed_data[17]), MVT_LLVector3d, 24);
|
||||
htolememcpy(new_target.mdV, &(packed_data[17]), MVT_LLVector3d, 24);
|
||||
setTargetPos(new_target);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -328,29 +328,29 @@ void LLHUDEffectLookAt::packData(LLMessageSystem *mesgsys)
|
|||
|
||||
if (mSourceObject)
|
||||
{
|
||||
htonmemcpy(&(packed_data[SOURCE_AVATAR]), mSourceObject->mID.mData, MVT_LLUUID, 16);
|
||||
htolememcpy(&(packed_data[SOURCE_AVATAR]), mSourceObject->mID.mData, MVT_LLUUID, 16);
|
||||
}
|
||||
else
|
||||
{
|
||||
htonmemcpy(&(packed_data[SOURCE_AVATAR]), LLUUID::null.mData, MVT_LLUUID, 16);
|
||||
htolememcpy(&(packed_data[SOURCE_AVATAR]), LLUUID::null.mData, MVT_LLUUID, 16);
|
||||
}
|
||||
|
||||
// pack both target object and position
|
||||
// position interpreted as offset if target object is non-null
|
||||
if (mTargetObject)
|
||||
{
|
||||
htonmemcpy(&(packed_data[TARGET_OBJECT]), target_object->mID.mData, MVT_LLUUID, 16);
|
||||
htolememcpy(&(packed_data[TARGET_OBJECT]), target_object->mID.mData, MVT_LLUUID, 16);
|
||||
}
|
||||
else
|
||||
{
|
||||
htonmemcpy(&(packed_data[TARGET_OBJECT]), LLUUID::null.mData, MVT_LLUUID, 16);
|
||||
htolememcpy(&(packed_data[TARGET_OBJECT]), LLUUID::null.mData, MVT_LLUUID, 16);
|
||||
}
|
||||
|
||||
htonmemcpy(&(packed_data[TARGET_POS]), target_offset_global.mdV, MVT_LLVector3d, 24);
|
||||
htolememcpy(&(packed_data[TARGET_POS]), target_offset_global.mdV, MVT_LLVector3d, 24);
|
||||
|
||||
U8 lookAtTypePacked = (U8)target_type;
|
||||
|
||||
htonmemcpy(&(packed_data[LOOKAT_TYPE]), &lookAtTypePacked, MVT_U8, 1);
|
||||
htolememcpy(&(packed_data[LOOKAT_TYPE]), &lookAtTypePacked, MVT_U8, 1);
|
||||
|
||||
mesgsys->addBinaryDataFast(_PREHASH_TypeData, packed_data, PKT_SIZE);
|
||||
|
||||
|
|
@ -384,7 +384,7 @@ void LLHUDEffectLookAt::unpackData(LLMessageSystem *mesgsys, S32 blocknum)
|
|||
}
|
||||
mesgsys->getBinaryDataFast(_PREHASH_Effect, _PREHASH_TypeData, packed_data, PKT_SIZE, blocknum);
|
||||
|
||||
htonmemcpy(source_id.mData, &(packed_data[SOURCE_AVATAR]), MVT_LLUUID, 16);
|
||||
htolememcpy(source_id.mData, &(packed_data[SOURCE_AVATAR]), MVT_LLUUID, 16);
|
||||
|
||||
LLViewerObject *objp = gObjectList.findObject(source_id);
|
||||
if (objp && objp->isAvatar())
|
||||
|
|
@ -397,11 +397,11 @@ void LLHUDEffectLookAt::unpackData(LLMessageSystem *mesgsys, S32 blocknum)
|
|||
return;
|
||||
}
|
||||
|
||||
htonmemcpy(target_id.mData, &(packed_data[TARGET_OBJECT]), MVT_LLUUID, 16);
|
||||
htolememcpy(target_id.mData, &(packed_data[TARGET_OBJECT]), MVT_LLUUID, 16);
|
||||
|
||||
objp = gObjectList.findObject(target_id);
|
||||
|
||||
htonmemcpy(new_target.mdV, &(packed_data[TARGET_POS]), MVT_LLVector3d, 24);
|
||||
htolememcpy(new_target.mdV, &(packed_data[TARGET_POS]), MVT_LLVector3d, 24);
|
||||
|
||||
if (objp)
|
||||
{
|
||||
|
|
@ -417,7 +417,7 @@ void LLHUDEffectLookAt::unpackData(LLMessageSystem *mesgsys, S32 blocknum)
|
|||
}
|
||||
|
||||
U8 lookAtTypeUnpacked = 0;
|
||||
htonmemcpy(&lookAtTypeUnpacked, &(packed_data[LOOKAT_TYPE]), MVT_U8, 1);
|
||||
htolememcpy(&lookAtTypeUnpacked, &(packed_data[LOOKAT_TYPE]), MVT_U8, 1);
|
||||
if ((U8)LOOKAT_NUM_TARGETS > lookAtTypeUnpacked)
|
||||
{
|
||||
mTargetType = (ELookAtType)lookAtTypeUnpacked;
|
||||
|
|
|
|||
|
|
@ -131,28 +131,28 @@ void LLHUDEffectPointAt::packData(LLMessageSystem *mesgsys)
|
|||
|
||||
if (mSourceObject)
|
||||
{
|
||||
htonmemcpy(&(packed_data[SOURCE_AVATAR]), mSourceObject->mID.mData, MVT_LLUUID, 16);
|
||||
htolememcpy(&(packed_data[SOURCE_AVATAR]), mSourceObject->mID.mData, MVT_LLUUID, 16);
|
||||
}
|
||||
else
|
||||
{
|
||||
htonmemcpy(&(packed_data[SOURCE_AVATAR]), LLUUID::null.mData, MVT_LLUUID, 16);
|
||||
htolememcpy(&(packed_data[SOURCE_AVATAR]), LLUUID::null.mData, MVT_LLUUID, 16);
|
||||
}
|
||||
|
||||
// pack both target object and position
|
||||
// position interpreted as offset if target object is non-null
|
||||
if (mTargetObject)
|
||||
{
|
||||
htonmemcpy(&(packed_data[TARGET_OBJECT]), mTargetObject->mID.mData, MVT_LLUUID, 16);
|
||||
htolememcpy(&(packed_data[TARGET_OBJECT]), mTargetObject->mID.mData, MVT_LLUUID, 16);
|
||||
}
|
||||
else
|
||||
{
|
||||
htonmemcpy(&(packed_data[TARGET_OBJECT]), LLUUID::null.mData, MVT_LLUUID, 16);
|
||||
htolememcpy(&(packed_data[TARGET_OBJECT]), LLUUID::null.mData, MVT_LLUUID, 16);
|
||||
}
|
||||
|
||||
htonmemcpy(&(packed_data[TARGET_POS]), mTargetOffsetGlobal.mdV, MVT_LLVector3d, 24);
|
||||
htolememcpy(&(packed_data[TARGET_POS]), mTargetOffsetGlobal.mdV, MVT_LLVector3d, 24);
|
||||
|
||||
U8 pointAtTypePacked = (U8)mTargetType;
|
||||
htonmemcpy(&(packed_data[POINTAT_TYPE]), &pointAtTypePacked, MVT_U8, 1);
|
||||
htolememcpy(&(packed_data[POINTAT_TYPE]), &pointAtTypePacked, MVT_U8, 1);
|
||||
|
||||
mesgsys->addBinaryDataFast(_PREHASH_TypeData, packed_data, PKT_SIZE);
|
||||
|
||||
|
|
@ -188,10 +188,10 @@ void LLHUDEffectPointAt::unpackData(LLMessageSystem *mesgsys, S32 blocknum)
|
|||
}
|
||||
mesgsys->getBinaryDataFast(_PREHASH_Effect, _PREHASH_TypeData, packed_data, PKT_SIZE, blocknum);
|
||||
|
||||
htonmemcpy(source_id.mData, &(packed_data[SOURCE_AVATAR]), MVT_LLUUID, 16);
|
||||
htonmemcpy(target_id.mData, &(packed_data[TARGET_OBJECT]), MVT_LLUUID, 16);
|
||||
htonmemcpy(new_target.mdV, &(packed_data[TARGET_POS]), MVT_LLVector3d, 24);
|
||||
htonmemcpy(&pointAtTypeUnpacked, &(packed_data[POINTAT_TYPE]), MVT_U8, 1);
|
||||
htolememcpy(source_id.mData, &(packed_data[SOURCE_AVATAR]), MVT_LLUUID, 16);
|
||||
htolememcpy(target_id.mData, &(packed_data[TARGET_OBJECT]), MVT_LLUUID, 16);
|
||||
htolememcpy(new_target.mdV, &(packed_data[TARGET_POS]), MVT_LLVector3d, 24);
|
||||
htolememcpy(&pointAtTypeUnpacked, &(packed_data[POINTAT_TYPE]), MVT_U8, 1);
|
||||
|
||||
LLViewerObject *objp = gObjectList.findObject(source_id);
|
||||
if (objp && objp->isAvatar())
|
||||
|
|
|
|||
|
|
@ -87,15 +87,15 @@ void LLHUDEffectSpiral::packData(LLMessageSystem *mesgsys)
|
|||
|
||||
if (mSourceObject)
|
||||
{
|
||||
htonmemcpy(packed_data, mSourceObject->mID.mData, MVT_LLUUID, 16);
|
||||
htolememcpy(packed_data, mSourceObject->mID.mData, MVT_LLUUID, 16);
|
||||
}
|
||||
if (mTargetObject)
|
||||
{
|
||||
htonmemcpy(packed_data + 16, mTargetObject->mID.mData, MVT_LLUUID, 16);
|
||||
htolememcpy(packed_data + 16, mTargetObject->mID.mData, MVT_LLUUID, 16);
|
||||
}
|
||||
if (!mPositionGlobal.isExactlyZero())
|
||||
{
|
||||
htonmemcpy(packed_data + 32, mPositionGlobal.mdV, MVT_LLVector3d, 24);
|
||||
htolememcpy(packed_data + 32, mPositionGlobal.mdV, MVT_LLVector3d, 24);
|
||||
}
|
||||
mesgsys->addBinaryDataFast(_PREHASH_TypeData, packed_data, 56);
|
||||
}
|
||||
|
|
@ -116,9 +116,9 @@ void LLHUDEffectSpiral::unpackData(LLMessageSystem *mesgsys, S32 blocknum)
|
|||
mesgsys->getBinaryDataFast(_PREHASH_Effect, _PREHASH_TypeData,
|
||||
packed_data, EFFECT_SIZE, blocknum, EFFECT_SIZE);
|
||||
|
||||
htonmemcpy(object_id.mData, packed_data, MVT_LLUUID, 16);
|
||||
htonmemcpy(target_object_id.mData, packed_data + 16, MVT_LLUUID, 16);
|
||||
htonmemcpy(mPositionGlobal.mdV, packed_data + 32, MVT_LLVector3d, 24);
|
||||
htolememcpy(object_id.mData, packed_data, MVT_LLUUID, 16);
|
||||
htolememcpy(target_object_id.mData, packed_data + 16, MVT_LLUUID, 16);
|
||||
htolememcpy(mPositionGlobal.mdV, packed_data + 32, MVT_LLVector3d, 24);
|
||||
|
||||
LLViewerObject *objp = NULL;
|
||||
|
||||
|
|
|
|||
|
|
@ -5067,7 +5067,7 @@ bool move_task_inventory_callback(const LLSD& notification, const LLSD& response
|
|||
{
|
||||
LLInventoryObject::object_list_t inventory_objects;
|
||||
object->getInventoryContents(inventory_objects);
|
||||
int contents_count = inventory_objects.size()-1; //subtract one for containing folder
|
||||
int contents_count = inventory_objects.size();
|
||||
LLInventoryCopyAndWearObserver* inventoryObserver = new LLInventoryCopyAndWearObserver(cat_and_wear->mCatID, contents_count, cat_and_wear->mFolderResponded,
|
||||
cat_and_wear->mReplace);
|
||||
|
||||
|
|
|
|||
|
|
@ -42,7 +42,7 @@
|
|||
#include "llviewerfoldertype.h"
|
||||
#include "llradiogroup.h"
|
||||
#include "llstartup.h"
|
||||
|
||||
#include <boost/regex.hpp>
|
||||
// linden library includes
|
||||
#include "llclipboard.h"
|
||||
#include "lltrans.h"
|
||||
|
|
@ -84,11 +84,6 @@ LLInventoryFilter::LLInventoryFilter(const Params& p)
|
|||
mFirstSuccessGeneration(0),
|
||||
mSearchType(SEARCHTYPE_NAME)
|
||||
{
|
||||
// <FS:Zi> Begin Multi-substring inventory search
|
||||
mSubStringMatchOffsets.clear();
|
||||
mFilterSubStrings.clear();
|
||||
// </FS:Zi> End Multi-substring inventory search
|
||||
|
||||
// copy mFilterOps into mDefaultFilterOps
|
||||
markDefault();
|
||||
mUsername = gAgentUsername;
|
||||
|
|
@ -106,79 +101,66 @@ bool LLInventoryFilter::check(const LLFolderViewModelItem* item)
|
|||
return true;
|
||||
}
|
||||
|
||||
// <FS:Zi> Multi-substring inventory search
|
||||
//std::string desc = listener->getSearchableCreatorName();
|
||||
//switch(mSearchType)
|
||||
//{
|
||||
// case SEARCHTYPE_CREATOR:
|
||||
// desc = listener->getSearchableCreatorName();
|
||||
// break;
|
||||
// case SEARCHTYPE_DESCRIPTION:
|
||||
// desc = listener->getSearchableDescription();
|
||||
// break;
|
||||
// case SEARCHTYPE_UUID:
|
||||
// desc = listener->getSearchableUUIDString();
|
||||
// break;
|
||||
// case SEARCHTYPE_NAME:
|
||||
// default:
|
||||
// desc = listener->getSearchableName();
|
||||
// break;
|
||||
//}
|
||||
|
||||
//bool passed = (mFilterSubString.size() ? desc.find(mFilterSubString) != std::string::npos : true);
|
||||
std::string::size_type string_offset = std::string::npos;
|
||||
if (mFilterSubStrings.size())
|
||||
std::string desc = listener->getSearchableCreatorName();
|
||||
switch(mSearchType)
|
||||
{
|
||||
std::string searchLabel;
|
||||
switch (mSearchType)
|
||||
case SEARCHTYPE_CREATOR:
|
||||
desc = listener->getSearchableCreatorName();
|
||||
break;
|
||||
case SEARCHTYPE_DESCRIPTION:
|
||||
desc = listener->getSearchableDescription();
|
||||
break;
|
||||
case SEARCHTYPE_UUID:
|
||||
desc = listener->getSearchableUUIDString();
|
||||
break;
|
||||
// <FS:Ansariel> Allow searching by all
|
||||
case SEARCHTYPE_ALL:
|
||||
desc = listener->getSearchableAll();
|
||||
break;
|
||||
// </FS:Ansariel>
|
||||
case SEARCHTYPE_NAME:
|
||||
default:
|
||||
desc = listener->getSearchableName();
|
||||
break;
|
||||
}
|
||||
|
||||
bool passed = true;
|
||||
// <FS:Ansariel> Allow searching by all
|
||||
//if (!mExactToken.empty() && (mSearchType == SEARCHTYPE_NAME))
|
||||
if (!mExactToken.empty() && ((mSearchType == SEARCHTYPE_NAME) || (mSearchType == SEARCHTYPE_ALL)))
|
||||
// </FS:Ansariel>
|
||||
{
|
||||
passed = false;
|
||||
typedef boost::tokenizer<boost::char_separator<char> > tokenizer;
|
||||
boost::char_separator<char> sep(" ");
|
||||
tokenizer tokens(desc, sep);
|
||||
|
||||
for (auto token_iter : tokens)
|
||||
{
|
||||
case SEARCHTYPE_NAME:
|
||||
searchLabel = listener->getSearchableName();
|
||||
break;
|
||||
case SEARCHTYPE_DESCRIPTION:
|
||||
searchLabel = listener->getSearchableDescription();
|
||||
break;
|
||||
case SEARCHTYPE_CREATOR:
|
||||
searchLabel = listener->getSearchableCreatorName();
|
||||
break;
|
||||
case SEARCHTYPE_UUID:
|
||||
searchLabel = listener->getSearchableUUIDString();
|
||||
break;
|
||||
case SEARCHTYPE_ALL:
|
||||
searchLabel = listener->getSearchableAll();
|
||||
break;
|
||||
default:
|
||||
LL_WARNS("LLInventoryFilter") << "Unknown search substring target: " << mSearchType << LL_ENDL;
|
||||
searchLabel = listener->getSearchableName();
|
||||
break;
|
||||
}
|
||||
|
||||
U32 index = 0;
|
||||
for (std::vector<std::string>::iterator it = mFilterSubStrings.begin();
|
||||
it < mFilterSubStrings.end(); it++, index++)
|
||||
{
|
||||
std::string::size_type sub_string_offset = searchLabel.find(*it);
|
||||
|
||||
mSubStringMatchOffsets[index] = sub_string_offset;
|
||||
|
||||
if (sub_string_offset == std::string::npos)
|
||||
if (token_iter == mExactToken)
|
||||
{
|
||||
string_offset = std::string::npos;
|
||||
for (std::vector<std::string::size_type>::iterator it = mSubStringMatchOffsets.begin();
|
||||
it < mSubStringMatchOffsets.end(); it++)
|
||||
{
|
||||
*it = std::string::npos;
|
||||
}
|
||||
passed = true;
|
||||
break;
|
||||
}
|
||||
else if (string_offset == std::string::npos)
|
||||
}
|
||||
}
|
||||
// <FS:Ansariel> Allow searching by all
|
||||
//else if ((mFilterTokens.size() > 0) && (mSearchType == SEARCHTYPE_NAME))
|
||||
else if ((mFilterTokens.size() > 0) && ((mSearchType == SEARCHTYPE_NAME) || (mSearchType == SEARCHTYPE_ALL)))
|
||||
// </FS:Ansariel>
|
||||
{
|
||||
for (auto token_iter : mFilterTokens)
|
||||
{
|
||||
if (desc.find(token_iter) == std::string::npos)
|
||||
{
|
||||
string_offset = sub_string_offset;
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
bool passed = (mFilterSubString.size() == 0 || string_offset != std::string::npos);
|
||||
// </FS:Zi> Multi-substring inventory search
|
||||
else
|
||||
{
|
||||
passed = (mFilterSubString.size() ? desc.find(mFilterSubString) != std::string::npos : true);
|
||||
}
|
||||
|
||||
passed = passed && checkAgainstFilterType(listener);
|
||||
passed = passed && checkAgainstPermissions(listener);
|
||||
|
|
@ -794,34 +776,41 @@ void LLInventoryFilter::setFilterSubString(const std::string& string)
|
|||
mFilterSubStringOrig = string;
|
||||
LLStringUtil::trimHead(filter_sub_string_new);
|
||||
LLStringUtil::toUpper(filter_sub_string_new);
|
||||
|
||||
// <FS:Zi> Multi-substring inventory search
|
||||
// Cut filter string into several substrings, separated by +
|
||||
{
|
||||
mFilterSubStrings.clear();
|
||||
mSubStringMatchOffsets.clear();
|
||||
std::string::size_type frm = 0;
|
||||
std::string::size_type to;
|
||||
do
|
||||
{
|
||||
to = filter_sub_string_new.find_first_of('+',frm);
|
||||
|
||||
std::string subSubString = (to == std::string::npos) ? filter_sub_string_new.substr(frm, to) : filter_sub_string_new.substr(frm, to-frm);
|
||||
|
||||
if (subSubString.size())
|
||||
{
|
||||
mFilterSubStrings.push_back(subSubString);
|
||||
mSubStringMatchOffsets.push_back(std::string::npos);
|
||||
}
|
||||
|
||||
frm = to+1;
|
||||
}
|
||||
while (to != std::string::npos);
|
||||
}
|
||||
// </FS:Zi> Multi-substring inventory search
|
||||
|
||||
if (mFilterSubString != filter_sub_string_new)
|
||||
{
|
||||
|
||||
mFilterTokens.clear();
|
||||
if (filter_sub_string_new.find_first_of("+") != std::string::npos)
|
||||
{
|
||||
typedef boost::tokenizer<boost::char_separator<char> > tokenizer;
|
||||
boost::char_separator<char> sep("+");
|
||||
tokenizer tokens(filter_sub_string_new, sep);
|
||||
|
||||
for (auto token_iter : tokens)
|
||||
{
|
||||
mFilterTokens.push_back(token_iter);
|
||||
}
|
||||
}
|
||||
|
||||
std::string old_token = mExactToken;
|
||||
mExactToken.clear();
|
||||
bool exact_token_changed = false;
|
||||
if (mFilterTokens.empty() && filter_sub_string_new.size() > 2)
|
||||
{
|
||||
boost::regex mPattern = boost::regex("\"\\s*([^<]*)?\\s*\"",
|
||||
boost::regex::perl | boost::regex::icase);
|
||||
boost::match_results<std::string::const_iterator> matches;
|
||||
mExactToken = (boost::regex_match(filter_sub_string_new, matches, mPattern) && matches[1].matched)
|
||||
? matches[1]
|
||||
: LLStringUtil::null;
|
||||
if ((old_token.empty() && !mExactToken.empty())
|
||||
|| (!old_token.empty() && mExactToken.empty()))
|
||||
{
|
||||
exact_token_changed = true;
|
||||
}
|
||||
}
|
||||
|
||||
// hitting BACKSPACE, for example
|
||||
const BOOL less_restrictive = mFilterSubString.size() >= filter_sub_string_new.size()
|
||||
&& !mFilterSubString.substr(0, filter_sub_string_new.size()).compare(filter_sub_string_new);
|
||||
|
|
@ -831,7 +820,11 @@ void LLInventoryFilter::setFilterSubString(const std::string& string)
|
|||
&& !filter_sub_string_new.substr(0, mFilterSubString.size()).compare(mFilterSubString);
|
||||
|
||||
mFilterSubString = filter_sub_string_new;
|
||||
if (less_restrictive)
|
||||
if (exact_token_changed)
|
||||
{
|
||||
setModified(FILTER_RESTART);
|
||||
}
|
||||
else if (less_restrictive)
|
||||
{
|
||||
setModified(FILTER_LESS_RESTRICTIVE);
|
||||
}
|
||||
|
|
@ -1595,25 +1588,3 @@ bool LLInventoryFilter::FilterOps::DateRange::validateBlock( bool emit_errors
|
|||
}
|
||||
return valid;
|
||||
}
|
||||
|
||||
// <FS:Zi> Multi-substring inventory search
|
||||
|
||||
// For use by LLFolderViewItem for highlighting
|
||||
|
||||
U32 LLInventoryFilter::getFilterSubStringCount() const
|
||||
{
|
||||
return mFilterSubStrings.size();
|
||||
}
|
||||
|
||||
std::string::size_type LLInventoryFilter::getFilterSubStringPos(U32 index) const
|
||||
{
|
||||
if (index >= mSubStringMatchOffsets.size()) return std::string::npos;
|
||||
return mSubStringMatchOffsets[index];
|
||||
}
|
||||
|
||||
std::string::size_type LLInventoryFilter::getFilterSubStringLen(U32 index) const
|
||||
{
|
||||
if (index >= mFilterSubStrings.size()) return 0;
|
||||
return mFilterSubStrings[index].size();
|
||||
}
|
||||
// </FS:Zi> Multi-substring inventory search
|
||||
|
|
|
|||
|
|
@ -330,11 +330,6 @@ private:
|
|||
FilterOps mBackupFilterOps; // for backup purposes when leaving 'search link' mode
|
||||
|
||||
std::string mFilterSubString;
|
||||
|
||||
// <FS:Zi> Multi-substring inventory search
|
||||
std::vector<std::string::size_type> mSubStringMatchOffsets;
|
||||
std::vector<std::string> mFilterSubStrings;
|
||||
// </FS:Zi> Multi-substring inventory search
|
||||
|
||||
std::string mFilterSubStringOrig;
|
||||
std::string mUsername;
|
||||
|
|
@ -354,6 +349,9 @@ private:
|
|||
std::string mEmptyLookupMessage;
|
||||
|
||||
ESearchType mSearchType;
|
||||
|
||||
std::vector<std::string> mFilterTokens;
|
||||
std::string mExactToken;
|
||||
};
|
||||
|
||||
#endif
|
||||
|
|
|
|||
|
|
@ -274,6 +274,7 @@ std::set<std::string> LLTransactionNotificationListItem::getTypes()
|
|||
std::set<std::string> types;
|
||||
types.insert("PaymentReceived");
|
||||
types.insert("PaymentSent");
|
||||
types.insert("UploadPayment");
|
||||
return types;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -4301,20 +4301,20 @@ void LLSelectMgr::packMultipleUpdate(LLSelectNode* node, void *user_data)
|
|||
|
||||
if (type & UPD_POSITION)
|
||||
{
|
||||
htonmemcpy(&data[offset], &(object->getPosition().mV), MVT_LLVector3, 12);
|
||||
htolememcpy(&data[offset], &(object->getPosition().mV), MVT_LLVector3, 12);
|
||||
offset += 12;
|
||||
}
|
||||
if (type & UPD_ROTATION)
|
||||
{
|
||||
LLQuaternion quat = object->getRotation();
|
||||
LLVector3 vec = quat.packToVector3();
|
||||
htonmemcpy(&data[offset], &(vec.mV), MVT_LLQuaternion, 12);
|
||||
htolememcpy(&data[offset], &(vec.mV), MVT_LLQuaternion, 12);
|
||||
offset += 12;
|
||||
}
|
||||
if (type & UPD_SCALE)
|
||||
{
|
||||
//LL_INFOS() << "Sending object scale " << object->getScale() << LL_ENDL;
|
||||
htonmemcpy(&data[offset], &(object->getScale().mV), MVT_LLVector3, 12);
|
||||
htolememcpy(&data[offset], &(object->getScale().mV), MVT_LLVector3, 12);
|
||||
offset += 12;
|
||||
}
|
||||
gMessageSystem->addBinaryDataFast(_PREHASH_Data, data, offset);
|
||||
|
|
|
|||
|
|
@ -52,6 +52,29 @@
|
|||
#include "rlvcommon.h"
|
||||
// [/RLVa:KB]
|
||||
|
||||
class PropertiesChangedCallback : public LLInventoryCallback
|
||||
{
|
||||
public:
|
||||
PropertiesChangedCallback(LLHandle<LLPanel> sidepanel_handle, LLUUID &item_id, S32 id)
|
||||
: mHandle(sidepanel_handle), mItemId(item_id), mId(id)
|
||||
{}
|
||||
|
||||
void fire(const LLUUID &inv_item)
|
||||
{
|
||||
// inv_item can be null for some reason
|
||||
LLSidepanelItemInfo* sidepanel = dynamic_cast<LLSidepanelItemInfo*>(mHandle.get());
|
||||
if (sidepanel)
|
||||
{
|
||||
// sidepanel waits only for most recent update
|
||||
sidepanel->onUpdateCallback(mItemId, mId);
|
||||
}
|
||||
}
|
||||
private:
|
||||
LLHandle<LLPanel> mHandle;
|
||||
LLUUID mItemId;
|
||||
S32 mId;
|
||||
};
|
||||
|
||||
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
// Class LLItemPropertiesObserver
|
||||
//
|
||||
|
|
@ -71,7 +94,7 @@ public:
|
|||
}
|
||||
virtual void changed(U32 mask);
|
||||
private:
|
||||
LLSidepanelItemInfo* mFloater;
|
||||
LLSidepanelItemInfo* mFloater; // Not a handle because LLSidepanelItemInfo is managing LLItemPropertiesObserver
|
||||
};
|
||||
|
||||
void LLItemPropertiesObserver::changed(U32 mask)
|
||||
|
|
@ -118,7 +141,7 @@ public:
|
|||
S32 serial_num,
|
||||
void* user_data);
|
||||
private:
|
||||
LLSidepanelItemInfo* mFloater;
|
||||
LLSidepanelItemInfo* mFloater; // Not a handle because LLSidepanelItemInfo is managing LLObjectInventoryObserver
|
||||
};
|
||||
|
||||
/*virtual*/
|
||||
|
|
@ -141,6 +164,7 @@ LLSidepanelItemInfo::LLSidepanelItemInfo(const LLPanel::Params& p)
|
|||
: LLSidepanelInventorySubpanel(p)
|
||||
, mItemID(LLUUID::null)
|
||||
, mObjectInventoryObserver(NULL)
|
||||
, mUpdatePendingId(-1)
|
||||
{
|
||||
mPropertiesObserver = new LLItemPropertiesObserver(this);
|
||||
}
|
||||
|
|
@ -171,19 +195,19 @@ BOOL LLSidepanelItemInfo::postBuild()
|
|||
// owner permissions
|
||||
// Permissions debug text
|
||||
// group permissions
|
||||
getChild<LLUICtrl>("CheckShareWithGroup")->setCommitCallback(boost::bind(&LLSidepanelItemInfo::onCommitPermissions, this));
|
||||
getChild<LLUICtrl>("CheckShareWithGroup")->setCommitCallback(boost::bind(&LLSidepanelItemInfo::onCommitPermissions, this, _1));
|
||||
// everyone permissions
|
||||
getChild<LLUICtrl>("CheckEveryoneCopy")->setCommitCallback(boost::bind(&LLSidepanelItemInfo::onCommitPermissions, this));
|
||||
getChild<LLUICtrl>("CheckEveryoneCopy")->setCommitCallback(boost::bind(&LLSidepanelItemInfo::onCommitPermissions, this, _1));
|
||||
// next owner permissions
|
||||
getChild<LLUICtrl>("CheckNextOwnerModify")->setCommitCallback(boost::bind(&LLSidepanelItemInfo::onCommitPermissions, this));
|
||||
getChild<LLUICtrl>("CheckNextOwnerCopy")->setCommitCallback(boost::bind(&LLSidepanelItemInfo::onCommitPermissions, this));
|
||||
getChild<LLUICtrl>("CheckNextOwnerTransfer")->setCommitCallback(boost::bind(&LLSidepanelItemInfo::onCommitPermissions, this));
|
||||
getChild<LLUICtrl>("CheckNextOwnerModify")->setCommitCallback(boost::bind(&LLSidepanelItemInfo::onCommitPermissions, this, _1));
|
||||
getChild<LLUICtrl>("CheckNextOwnerCopy")->setCommitCallback(boost::bind(&LLSidepanelItemInfo::onCommitPermissions, this, _1));
|
||||
getChild<LLUICtrl>("CheckNextOwnerTransfer")->setCommitCallback(boost::bind(&LLSidepanelItemInfo::onCommitPermissions, this, _1));
|
||||
// Mark for sale or not, and sale info
|
||||
getChild<LLUICtrl>("CheckPurchase")->setCommitCallback(boost::bind(&LLSidepanelItemInfo::onCommitSaleInfo, this));
|
||||
getChild<LLUICtrl>("CheckPurchase")->setCommitCallback(boost::bind(&LLSidepanelItemInfo::onCommitSaleInfo, this, _1));
|
||||
// Change sale type, and sale info
|
||||
getChild<LLUICtrl>("ComboBoxSaleType")->setCommitCallback(boost::bind(&LLSidepanelItemInfo::onCommitSaleInfo, this));
|
||||
getChild<LLUICtrl>("ComboBoxSaleType")->setCommitCallback(boost::bind(&LLSidepanelItemInfo::onCommitSaleInfo, this, _1));
|
||||
// "Price" label for edit
|
||||
getChild<LLUICtrl>("Edit Cost")->setCommitCallback(boost::bind(&LLSidepanelItemInfo::onCommitSaleInfo, this));
|
||||
getChild<LLUICtrl>("Edit Cost")->setCommitCallback(boost::bind(&LLSidepanelItemInfo::onCommitSaleInfo, this, _1));
|
||||
refresh();
|
||||
return TRUE;
|
||||
}
|
||||
|
|
@ -195,11 +219,16 @@ void LLSidepanelItemInfo::setObjectID(const LLUUID& object_id)
|
|||
// Start monitoring changes in the object inventory to update
|
||||
// selected inventory item properties in Item Profile panel. See STORM-148.
|
||||
startObjectInventoryObserver();
|
||||
mUpdatePendingId = -1;
|
||||
}
|
||||
|
||||
void LLSidepanelItemInfo::setItemID(const LLUUID& item_id)
|
||||
{
|
||||
mItemID = item_id;
|
||||
if (mItemID != item_id)
|
||||
{
|
||||
mItemID = item_id;
|
||||
mUpdatePendingId = -1;
|
||||
}
|
||||
}
|
||||
|
||||
const LLUUID& LLSidepanelItemInfo::getObjectID() const
|
||||
|
|
@ -212,6 +241,15 @@ const LLUUID& LLSidepanelItemInfo::getItemID() const
|
|||
return mItemID;
|
||||
}
|
||||
|
||||
void LLSidepanelItemInfo::onUpdateCallback(const LLUUID& item_id, S32 received_update_id)
|
||||
{
|
||||
if (mItemID == item_id && mUpdatePendingId == received_update_id)
|
||||
{
|
||||
mUpdatePendingId = -1;
|
||||
refresh();
|
||||
}
|
||||
}
|
||||
|
||||
void LLSidepanelItemInfo::reset()
|
||||
{
|
||||
LLSidepanelInventorySubpanel::reset();
|
||||
|
|
@ -245,24 +283,16 @@ void LLSidepanelItemInfo::refresh()
|
|||
"LabelItemName",
|
||||
"LabelItemDesc",
|
||||
"LabelCreatorName",
|
||||
"LabelOwnerName",
|
||||
"CheckOwnerModify",
|
||||
"CheckOwnerCopy",
|
||||
"CheckOwnerTransfer",
|
||||
"CheckShareWithGroup",
|
||||
"CheckEveryoneCopy",
|
||||
"CheckNextOwnerModify",
|
||||
"CheckNextOwnerCopy",
|
||||
"CheckNextOwnerTransfer",
|
||||
"CheckPurchase",
|
||||
"Edit Cost"
|
||||
"LabelOwnerName"
|
||||
};
|
||||
|
||||
for(size_t t=0; t<LL_ARRAY_SIZE(no_item_names); ++t)
|
||||
{
|
||||
getChildView(no_item_names[t])->setEnabled(false);
|
||||
}
|
||||
|
||||
|
||||
setPropertiesFieldsEnabled(false);
|
||||
|
||||
const std::string hide_names[]={
|
||||
"BaseMaskDebug",
|
||||
"OwnerMaskDebug",
|
||||
|
|
@ -300,6 +330,11 @@ void LLSidepanelItemInfo::refreshFromItem(LLViewerInventoryItem* item)
|
|||
llassert(item);
|
||||
if (!item) return;
|
||||
|
||||
if (mUpdatePendingId != -1)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
// do not enable the UI for incomplete items.
|
||||
BOOL is_complete = item->isFinished();
|
||||
const BOOL cannot_restrict_permissions = LLInventoryType::cannotRestrictPermissions(item->getInventoryType());
|
||||
|
|
@ -750,6 +785,26 @@ void LLSidepanelItemInfo::stopObjectInventoryObserver()
|
|||
mObjectInventoryObserver = NULL;
|
||||
}
|
||||
|
||||
void LLSidepanelItemInfo::setPropertiesFieldsEnabled(bool enabled)
|
||||
{
|
||||
const std::string fields[] = {
|
||||
"CheckOwnerModify",
|
||||
"CheckOwnerCopy",
|
||||
"CheckOwnerTransfer",
|
||||
"CheckShareWithGroup",
|
||||
"CheckEveryoneCopy",
|
||||
"CheckNextOwnerModify",
|
||||
"CheckNextOwnerCopy",
|
||||
"CheckNextOwnerTransfer",
|
||||
"CheckPurchase",
|
||||
"Edit Cost"
|
||||
};
|
||||
for (size_t t = 0; t<LL_ARRAY_SIZE(fields); ++t)
|
||||
{
|
||||
getChildView(fields[t])->setEnabled(false);
|
||||
}
|
||||
}
|
||||
|
||||
void LLSidepanelItemInfo::onClickCreator()
|
||||
{
|
||||
LLViewerInventoryItem* item = findItem();
|
||||
|
|
@ -832,10 +887,18 @@ void LLSidepanelItemInfo::onCommitDescription()
|
|||
}
|
||||
}
|
||||
|
||||
// static
|
||||
void LLSidepanelItemInfo::onCommitPermissions()
|
||||
void LLSidepanelItemInfo::onCommitPermissions(LLUICtrl* ctrl)
|
||||
{
|
||||
if (ctrl)
|
||||
{
|
||||
// will be enabled by response from server
|
||||
ctrl->setEnabled(false);
|
||||
}
|
||||
updatePermissions();
|
||||
}
|
||||
|
||||
void LLSidepanelItemInfo::updatePermissions()
|
||||
{
|
||||
//LL_INFOS() << "LLSidepanelItemInfo::onCommitPermissions()" << LL_ENDL;
|
||||
LLViewerInventoryItem* item = findItem();
|
||||
if(!item) return;
|
||||
|
||||
|
|
@ -923,19 +986,17 @@ void LLSidepanelItemInfo::onCommitPermissions()
|
|||
}
|
||||
|
||||
// static
|
||||
void LLSidepanelItemInfo::onCommitSaleInfo()
|
||||
void LLSidepanelItemInfo::onCommitSaleInfo(LLUICtrl* ctrl)
|
||||
{
|
||||
if (ctrl)
|
||||
{
|
||||
// will be enabled by response from server
|
||||
ctrl->setEnabled(false);
|
||||
}
|
||||
//LL_INFOS() << "LLSidepanelItemInfo::onCommitSaleInfo()" << LL_ENDL;
|
||||
updateSaleInfo();
|
||||
}
|
||||
|
||||
// static
|
||||
void LLSidepanelItemInfo::onCommitSaleType()
|
||||
{
|
||||
//LL_INFOS() << "LLSidepanelItemInfo::onCommitSaleType()" << LL_ENDL;
|
||||
updateSaleInfo();
|
||||
}
|
||||
|
||||
void LLSidepanelItemInfo::updateSaleInfo()
|
||||
{
|
||||
LLViewerInventoryItem* item = findItem();
|
||||
|
|
@ -1016,7 +1077,12 @@ void LLSidepanelItemInfo::onCommitChanges(LLPointer<LLViewerInventoryItem> item)
|
|||
if (mObjectID.isNull())
|
||||
{
|
||||
// This is in the agent's inventory.
|
||||
item->updateServer(FALSE);
|
||||
// Mark update as pending and wait only for most recent one in case user requested for couple
|
||||
// Once update arrives or any of ids change drop pending id.
|
||||
mUpdatePendingId++;
|
||||
LLPointer<LLInventoryCallback> callback = new PropertiesChangedCallback(getHandle(), mItemID, mUpdatePendingId);
|
||||
update_inventory_item(item.get(), callback);
|
||||
//item->updateServer(FALSE);
|
||||
gInventory.updateItem(item);
|
||||
gInventory.notifyObservers();
|
||||
}
|
||||
|
|
@ -1041,6 +1107,7 @@ void LLSidepanelItemInfo::onCommitChanges(LLPointer<LLViewerInventoryItem> item)
|
|||
// prevents flashing in content tab and some duplicated request.
|
||||
object->dirtyInventory();
|
||||
}
|
||||
setPropertiesFieldsEnabled(false);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -1069,7 +1136,6 @@ void LLSidepanelItemInfo::save()
|
|||
{
|
||||
onCommitName();
|
||||
onCommitDescription();
|
||||
onCommitPermissions();
|
||||
onCommitSaleInfo();
|
||||
onCommitSaleType();
|
||||
updatePermissions();
|
||||
updateSaleInfo();
|
||||
}
|
||||
|
|
|
|||
|
|
@ -57,6 +57,9 @@ public:
|
|||
const LLUUID& getObjectID() const;
|
||||
const LLUUID& getItemID() const;
|
||||
|
||||
// if received update and item id (from callback) matches internal ones, update UI
|
||||
void onUpdateCallback(const LLUUID& item_id, S32 received_update_id);
|
||||
|
||||
protected:
|
||||
/*virtual*/ void refresh();
|
||||
/*virtual*/ void save();
|
||||
|
|
@ -71,12 +74,16 @@ private:
|
|||
|
||||
void startObjectInventoryObserver();
|
||||
void stopObjectInventoryObserver();
|
||||
void setPropertiesFieldsEnabled(bool enabled);
|
||||
|
||||
LLUUID mItemID; // inventory UUID for the inventory item.
|
||||
LLUUID mObjectID; // in-world task UUID, or null if in agent inventory.
|
||||
LLItemPropertiesObserver* mPropertiesObserver; // for syncing changes to item
|
||||
LLObjectInventoryObserver* mObjectInventoryObserver; // for syncing changes to items inside an object
|
||||
|
||||
|
||||
// We can send multiple properties updates simultaneously, make sure only last response counts and there won't be a race condition.
|
||||
S32 mUpdatePendingId;
|
||||
|
||||
//
|
||||
// UI Elements
|
||||
//
|
||||
|
|
@ -85,9 +92,9 @@ protected:
|
|||
void onClickOwner();
|
||||
void onCommitName();
|
||||
void onCommitDescription();
|
||||
void onCommitPermissions();
|
||||
void onCommitSaleInfo();
|
||||
void onCommitSaleType();
|
||||
void onCommitPermissions(LLUICtrl* ctrl);
|
||||
void updatePermissions();
|
||||
void onCommitSaleInfo(LLUICtrl* ctrl);
|
||||
void updateSaleInfo();
|
||||
void onCommitChanges(LLPointer<LLViewerInventoryItem> item);
|
||||
};
|
||||
|
|
|
|||
|
|
@ -178,9 +178,6 @@ BOOL LLSidepanelTaskInfo::postBuild()
|
|||
|
||||
void LLSidepanelTaskInfo::disableAll()
|
||||
{
|
||||
mDAPermModify->setEnabled(FALSE);
|
||||
mDAPermModify->setValue(LLStringUtil::null);
|
||||
|
||||
mDACreatorName->setValue(LLStringUtil::null);
|
||||
mDACreatorName->setEnabled(FALSE);
|
||||
|
||||
|
|
@ -188,18 +185,42 @@ void LLSidepanelTaskInfo::disableAll()
|
|||
mDAOwnerName->setValue(LLStringUtil::null);
|
||||
mDAOwnerName->setEnabled(FALSE);
|
||||
|
||||
mDAButtonSetGroup->setEnabled(FALSE);
|
||||
|
||||
mDAObjectName->setValue(LLStringUtil::null);
|
||||
mDAObjectName->setEnabled(FALSE);
|
||||
mDAName->setEnabled(FALSE);
|
||||
mDADescription->setEnabled(FALSE);
|
||||
mDAObjectDescription->setValue(LLStringUtil::null);
|
||||
mDAObjectDescription->setEnabled(FALSE);
|
||||
|
||||
|
||||
mDAPathfindingAttributes->setEnabled(FALSE);
|
||||
mDAPathfindingAttributes->setValue(LLStringUtil::null);
|
||||
|
||||
mDAButtonSetGroup->setEnabled(FALSE);
|
||||
mDAButtonDeed->setEnabled(FALSE);
|
||||
|
||||
mDAPermModify->setEnabled(FALSE);
|
||||
mDAPermModify->setValue(LLStringUtil::null);
|
||||
mDAEditCost->setValue(LLStringUtil::null);
|
||||
mDAComboSaleType->setValue(LLSaleInfo::FS_COPY);
|
||||
|
||||
disablePermissions();
|
||||
|
||||
mDAB->setVisible(FALSE);
|
||||
mDAO->setVisible(FALSE);
|
||||
mDAG->setVisible(FALSE);
|
||||
mDAE->setVisible(FALSE);
|
||||
mDAN->setVisible(FALSE);
|
||||
mDAF->setVisible(FALSE);
|
||||
|
||||
mOpenBtn->setEnabled(FALSE);
|
||||
mPayBtn->setEnabled(FALSE);
|
||||
mBuyBtn->setEnabled(FALSE);
|
||||
}
|
||||
|
||||
void LLSidepanelTaskInfo::disablePermissions()
|
||||
{
|
||||
mDACheckboxShareWithGroup->setValue(FALSE);
|
||||
mDACheckboxShareWithGroup->setEnabled(FALSE);
|
||||
mDAButtonDeed->setEnabled(FALSE);
|
||||
|
||||
mDACheckboxAllowEveryoneMove->setValue(FALSE);
|
||||
mDACheckboxAllowEveryoneMove->setEnabled(FALSE);
|
||||
|
|
@ -221,33 +242,17 @@ void LLSidepanelTaskInfo::disableAll()
|
|||
//checkbox include in search
|
||||
mDASearchCheck->setValue(FALSE);
|
||||
mDASearchCheck->setEnabled(FALSE);
|
||||
|
||||
mDAComboSaleType->setValue(LLSaleInfo::FS_COPY);
|
||||
|
||||
mDAComboSaleType->setEnabled(FALSE);
|
||||
|
||||
mDAEditCost->setValue(LLStringUtil::null);
|
||||
|
||||
mDAEditCost->setEnabled(FALSE);
|
||||
|
||||
|
||||
mDALabelClickAction->setEnabled(FALSE);
|
||||
if (mDAComboClickAction)
|
||||
{
|
||||
mDAComboClickAction->setEnabled(FALSE);
|
||||
mDAComboClickAction->clear();
|
||||
}
|
||||
|
||||
mDAPathfindingAttributes->setEnabled(FALSE);
|
||||
mDAPathfindingAttributes->setValue(LLStringUtil::null);
|
||||
|
||||
mDAB->setVisible(FALSE);
|
||||
mDAO->setVisible(FALSE);
|
||||
mDAG->setVisible(FALSE);
|
||||
mDAE->setVisible(FALSE);
|
||||
mDAN->setVisible(FALSE);
|
||||
mDAF->setVisible(FALSE);
|
||||
|
||||
mOpenBtn->setEnabled(FALSE);
|
||||
mPayBtn->setEnabled(FALSE);
|
||||
mBuyBtn->setEnabled(FALSE);
|
||||
}
|
||||
|
||||
void LLSidepanelTaskInfo::refresh()
|
||||
|
|
@ -1001,6 +1006,12 @@ void LLSidepanelTaskInfo::onCommitPerm(LLUICtrl *ctrl, void *data, U8 field, U32
|
|||
BOOL new_state = check->get();
|
||||
|
||||
LLSelectMgr::getInstance()->selectionSetObjectPermissions(field, new_state, perm);
|
||||
|
||||
LLSidepanelTaskInfo* self = (LLSidepanelTaskInfo*)data;
|
||||
if (self)
|
||||
{
|
||||
self->disablePermissions();
|
||||
}
|
||||
}
|
||||
|
||||
// static
|
||||
|
|
|
|||
|
|
@ -95,6 +95,7 @@ protected:
|
|||
|
||||
static void doClickAction(U8 click_action);
|
||||
void disableAll();
|
||||
void disablePermissions();
|
||||
|
||||
private:
|
||||
LLNameBox* mLabelGroupName; // group name
|
||||
|
|
|
|||
|
|
@ -413,16 +413,24 @@ BOOL LLStatusBar::postBuild()
|
|||
mPanelNearByMedia->setFollows(FOLLOWS_TOP|FOLLOWS_RIGHT);
|
||||
mPanelNearByMedia->setVisible(FALSE);
|
||||
|
||||
updateBalancePanelPosition();
|
||||
|
||||
// Hook up and init for filtering
|
||||
mFilterEdit = getChild<LLSearchEditor>( "search_menu_edit" );
|
||||
mSearchPanel = getChild<LLPanel>( "menu_search_panel" );
|
||||
|
||||
mSearchPanel->setVisible(gSavedSettings.getBOOL("MenuSearch"));
|
||||
BOOL search_panel_visible = gSavedSettings.getBOOL("MenuSearch");
|
||||
mSearchPanel->setVisible(search_panel_visible);
|
||||
mFilterEdit->setKeystrokeCallback(boost::bind(&LLStatusBar::onUpdateFilterTerm, this));
|
||||
mFilterEdit->setCommitCallback(boost::bind(&LLStatusBar::onUpdateFilterTerm, this));
|
||||
collectSearchableItems();
|
||||
gSavedSettings.getControl("MenuSearch")->getCommitSignal()->connect(boost::bind(&LLStatusBar::updateMenuSearchVisibility, this, _2));
|
||||
|
||||
if (search_panel_visible)
|
||||
{
|
||||
updateMenuSearchPosition();
|
||||
}
|
||||
|
||||
// <FS:Ansariel> Script debug
|
||||
mScriptOut = getChild<LLIconCtrl>("scriptout");
|
||||
mScriptOut->setMouseDownCallback(boost::bind(&LLFloaterScriptDebug::show, LLUUID::null));
|
||||
|
|
@ -712,31 +720,7 @@ void LLStatusBar::setBalance(S32 balance)
|
|||
std::string label_str = getString("buycurrencylabel", string_args);
|
||||
mBoxBalance->setValue(label_str);
|
||||
|
||||
// <COLOSI opensim currency support>
|
||||
// Unclear if call to getTextBoundingRect updates text but assuming it calls length()
|
||||
// when getting the bounding box which will update the text and get the length of the
|
||||
// wrapped (Tea::wrapCurrency) text (see lluistring). If not, and currency symbols
|
||||
// that are not two characters have the wrong size bounding rect, then the correct
|
||||
// place to fix this is in the getTextBoundingRect() function, not here.
|
||||
// buy_rect below should be properly set to dirty() when we modify the currency and
|
||||
// should also be updated and wrapped before width is determined.
|
||||
// </COLOSI opensim currency support>
|
||||
|
||||
// Resize the L$ balance background to be wide enough for your balance plus the buy button
|
||||
{
|
||||
const S32 HPAD = 24;
|
||||
LLRect balance_rect = mBoxBalance->getTextBoundingRect();
|
||||
LLRect buy_rect = getChildView("buyL")->getRect();
|
||||
// <FS:Ansariel> Not used in Firestorm
|
||||
//LLRect shop_rect = getChildView("goShop")->getRect();
|
||||
LLView* balance_bg_view = getChildView("balance_bg");
|
||||
LLRect balance_bg_rect = balance_bg_view->getRect();
|
||||
// <FS:Ansariel> Not used in Firestorm
|
||||
//balance_bg_rect.mLeft = balance_bg_rect.mRight - (buy_rect.getWidth() + shop_rect.getWidth() + balance_rect.getWidth() + HPAD);
|
||||
balance_bg_rect.mLeft = balance_bg_rect.mRight - (buy_rect.getWidth() + balance_rect.getWidth() + HPAD);
|
||||
// </FS:Ansariel>
|
||||
balance_bg_view->setShape(balance_bg_rect);
|
||||
}
|
||||
updateBalancePanelPosition();
|
||||
|
||||
// If the search panel is shown, move this according to the new balance width. Parcel text will reshape itself in setParcelInfoText
|
||||
if (mSearchPanel && mSearchPanel->getVisible())
|
||||
|
|
@ -1117,6 +1101,33 @@ void LLStatusBar::updateMenuSearchPosition()
|
|||
mSearchPanel->setShape( searchRect );
|
||||
}
|
||||
|
||||
void LLStatusBar::updateBalancePanelPosition()
|
||||
{
|
||||
// <COLOSI opensim currency support>
|
||||
// Unclear if call to getTextBoundingRect updates text but assuming it calls length()
|
||||
// when getting the bounding box which will update the text and get the length of the
|
||||
// wrapped (Tea::wrapCurrency) text (see lluistring). If not, and currency symbols
|
||||
// that are not two characters have the wrong size bounding rect, then the correct
|
||||
// place to fix this is in the getTextBoundingRect() function, not here.
|
||||
// buy_rect below should be properly set to dirty() when we modify the currency and
|
||||
// should also be updated and wrapped before width is determined.
|
||||
// </COLOSI opensim currency support>
|
||||
|
||||
// Resize the L$ balance background to be wide enough for your balance plus the buy button
|
||||
const S32 HPAD = 24;
|
||||
LLRect balance_rect = mBoxBalance->getTextBoundingRect();
|
||||
LLRect buy_rect = getChildView("buyL")->getRect();
|
||||
// <FS:Ansariel> Not used in Firestorm
|
||||
//LLRect shop_rect = getChildView("goShop")->getRect();
|
||||
LLView* balance_bg_view = getChildView("balance_bg");
|
||||
LLRect balance_bg_rect = balance_bg_view->getRect();
|
||||
// <FS:Ansariel> Not used in Firestorm
|
||||
//balance_bg_rect.mLeft = balance_bg_rect.mRight - (buy_rect.getWidth() + shop_rect.getWidth() + balance_rect.getWidth() + HPAD);
|
||||
balance_bg_rect.mLeft = balance_bg_rect.mRight - (buy_rect.getWidth() + balance_rect.getWidth() + HPAD);
|
||||
// </FS:Ansariel>
|
||||
balance_bg_view->setShape(balance_bg_rect);
|
||||
}
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////////
|
||||
// Firestorm methods
|
||||
|
||||
|
|
|
|||
|
|
@ -179,7 +179,8 @@ private:
|
|||
std::unique_ptr< ll::statusbar::SearchData > mSearchData;
|
||||
void collectSearchableItems();
|
||||
void updateMenuSearchVisibility( const LLSD& data );
|
||||
void updateMenuSearchPosition();
|
||||
void updateMenuSearchPosition(); // depends onto balance position
|
||||
void updateBalancePanelPosition();
|
||||
|
||||
class LLParcelChangeObserver;
|
||||
|
||||
|
|
|
|||
|
|
@ -962,37 +962,9 @@ BOOL LLToolPie::handleDoubleClick(S32 x, S32 y, MASK mask)
|
|||
|
||||
static bool needs_tooltip(LLSelectNode* nodep)
|
||||
{
|
||||
if (!nodep)
|
||||
if (!nodep || !nodep->mValid)
|
||||
return false;
|
||||
|
||||
LLViewerObject* object = nodep->getObject();
|
||||
LLViewerObject *parent = (LLViewerObject *)object->getParent();
|
||||
if (object->flagHandleTouch()
|
||||
|| (parent && parent->flagHandleTouch())
|
||||
|| object->flagTakesMoney()
|
||||
|| (parent && parent->flagTakesMoney())
|
||||
|| object->flagAllowInventoryAdd()
|
||||
)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
U8 click_action = final_click_action(object);
|
||||
if (click_action != 0)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
if (nodep->mValid)
|
||||
{
|
||||
bool anyone_copy = anyone_copy_selection(nodep);
|
||||
bool for_sale = for_sale_selection(nodep);
|
||||
if (anyone_copy || for_sale)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -5051,6 +5051,8 @@ void process_avatar_animation(LLMessageSystem *mesgsys, void **user_data)
|
|||
S32 num_blocks = mesgsys->getNumberOfBlocksFast(_PREHASH_AnimationList);
|
||||
S32 num_source_blocks = mesgsys->getNumberOfBlocksFast(_PREHASH_AnimationSourceList);
|
||||
|
||||
LL_DEBUGS("Messaging", "Motion") << "Processing " << num_blocks << " Animations" << LL_ENDL;
|
||||
|
||||
//clear animation flags
|
||||
avatarp->mSignaledAnimations.clear();
|
||||
|
||||
|
|
@ -5063,8 +5065,6 @@ void process_avatar_animation(LLMessageSystem *mesgsys, void **user_data)
|
|||
mesgsys->getUUIDFast(_PREHASH_AnimationList, _PREHASH_AnimID, animation_id, i);
|
||||
mesgsys->getS32Fast(_PREHASH_AnimationList, _PREHASH_AnimSequenceID, anim_sequence_id, i);
|
||||
|
||||
LL_DEBUGS("Messaging") << "Anim sequence ID: " << anim_sequence_id << LL_ENDL;
|
||||
|
||||
avatarp->mSignaledAnimations[animation_id] = anim_sequence_id;
|
||||
|
||||
// *HACK: Disabling flying mode if it has been enabled shortly before the agent
|
||||
|
|
@ -5109,6 +5109,14 @@ void process_avatar_animation(LLMessageSystem *mesgsys, void **user_data)
|
|||
// </FS:Zi>
|
||||
}
|
||||
}
|
||||
LL_DEBUGS("Messaging", "Motion") << "Anim sequence ID: " << anim_sequence_id
|
||||
<< " Animation id: " << animation_id
|
||||
<< " From block: " << object_id << LL_ENDL;
|
||||
}
|
||||
else
|
||||
{
|
||||
LL_DEBUGS("Messaging", "Motion") << "Anim sequence ID: " << anim_sequence_id
|
||||
<< " Animation id: " << animation_id << LL_ENDL;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -6380,12 +6388,27 @@ bool attempt_standard_notification(LLMessageSystem* msgsystem)
|
|||
}
|
||||
}
|
||||
|
||||
// Error Notification can come with and without reason
|
||||
if (notificationID == "JoinGroupError" && llsdBlock.has("reason"))
|
||||
{
|
||||
LLNotificationsUtil::add("JoinGroupErrorReason", llsdBlock);
|
||||
return true;
|
||||
}
|
||||
// Error Notification can come with and without reason
|
||||
if (notificationID == "JoinGroupError")
|
||||
{
|
||||
if (llsdBlock.has("reason"))
|
||||
{
|
||||
LLNotificationsUtil::add("JoinGroupErrorReason", llsdBlock);
|
||||
return true;
|
||||
}
|
||||
if (llsdBlock.has("group_id"))
|
||||
{
|
||||
LLGroupData agent_gdatap;
|
||||
bool is_member = gAgent.getGroupData(llsdBlock["group_id"].asUUID(), agent_gdatap);
|
||||
if (is_member)
|
||||
{
|
||||
LLSD args;
|
||||
args["reason"] = LLTrans::getString("AlreadyInGroup");
|
||||
LLNotificationsUtil::add("JoinGroupErrorReason", args);
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
LLNotificationsUtil::add(notificationID, llsdBlock);
|
||||
return true;
|
||||
|
|
|
|||
|
|
@ -1312,7 +1312,7 @@ U32 LLViewerObject::processUpdateMessage(LLMessageSystem *mesgsys,
|
|||
{
|
||||
case (60 + 16):
|
||||
// pull out collision normal for avatar
|
||||
htonmemcpy(collision_plane.mV, &data[count], MVT_LLVector4, sizeof(LLVector4));
|
||||
htolememcpy(collision_plane.mV, &data[count], MVT_LLVector4, sizeof(LLVector4));
|
||||
((LLVOAvatar*)this)->setFootPlane(collision_plane);
|
||||
count += sizeof(LLVector4);
|
||||
// fall through
|
||||
|
|
@ -1320,23 +1320,23 @@ U32 LLViewerObject::processUpdateMessage(LLMessageSystem *mesgsys,
|
|||
this_update_precision = 32;
|
||||
// this is a terse update
|
||||
// pos
|
||||
htonmemcpy(new_pos_parent.mV, &data[count], MVT_LLVector3, sizeof(LLVector3));
|
||||
htolememcpy(new_pos_parent.mV, &data[count], MVT_LLVector3, sizeof(LLVector3));
|
||||
count += sizeof(LLVector3);
|
||||
// vel
|
||||
htonmemcpy((void*)getVelocity().mV, &data[count], MVT_LLVector3, sizeof(LLVector3));
|
||||
htolememcpy((void*)getVelocity().mV, &data[count], MVT_LLVector3, sizeof(LLVector3));
|
||||
count += sizeof(LLVector3);
|
||||
// acc
|
||||
htonmemcpy((void*)getAcceleration().mV, &data[count], MVT_LLVector3, sizeof(LLVector3));
|
||||
htolememcpy((void*)getAcceleration().mV, &data[count], MVT_LLVector3, sizeof(LLVector3));
|
||||
count += sizeof(LLVector3);
|
||||
// theta
|
||||
{
|
||||
LLVector3 vec;
|
||||
htonmemcpy(vec.mV, &data[count], MVT_LLVector3, sizeof(LLVector3));
|
||||
htolememcpy(vec.mV, &data[count], MVT_LLVector3, sizeof(LLVector3));
|
||||
new_rot.unpackFromVector3(vec);
|
||||
}
|
||||
count += sizeof(LLVector3);
|
||||
// omega
|
||||
htonmemcpy((void*)new_angv.mV, &data[count], MVT_LLVector3, sizeof(LLVector3));
|
||||
htolememcpy((void*)new_angv.mV, &data[count], MVT_LLVector3, sizeof(LLVector3));
|
||||
if (new_angv.isExactlyZero())
|
||||
{
|
||||
// reset rotation time
|
||||
|
|
@ -1352,7 +1352,7 @@ U32 LLViewerObject::processUpdateMessage(LLMessageSystem *mesgsys,
|
|||
break;
|
||||
case(32 + 16):
|
||||
// pull out collision normal for avatar
|
||||
htonmemcpy(collision_plane.mV, &data[count], MVT_LLVector4, sizeof(LLVector4));
|
||||
htolememcpy(collision_plane.mV, &data[count], MVT_LLVector4, sizeof(LLVector4));
|
||||
((LLVOAvatar*)this)->setFootPlane(collision_plane);
|
||||
count += sizeof(LLVector4);
|
||||
// fall through
|
||||
|
|
@ -1362,7 +1362,7 @@ U32 LLViewerObject::processUpdateMessage(LLMessageSystem *mesgsys,
|
|||
|
||||
// This is a terse 16 update, so treat data as an array of U16's.
|
||||
#ifdef LL_BIG_ENDIAN
|
||||
htonmemcpy(valswizzle, &data[count], MVT_U16Vec3, 6);
|
||||
htolememcpy(valswizzle, &data[count], MVT_U16Vec3, 6);
|
||||
val = valswizzle;
|
||||
#else
|
||||
val = (U16 *) &data[count];
|
||||
|
|
@ -1373,7 +1373,7 @@ U32 LLViewerObject::processUpdateMessage(LLMessageSystem *mesgsys,
|
|||
new_pos_parent.mV[VZ] = U16_to_F32(val[VZ], MIN_HEIGHT, MAX_HEIGHT);
|
||||
|
||||
#ifdef LL_BIG_ENDIAN
|
||||
htonmemcpy(valswizzle, &data[count], MVT_U16Vec3, 6);
|
||||
htolememcpy(valswizzle, &data[count], MVT_U16Vec3, 6);
|
||||
val = valswizzle;
|
||||
#else
|
||||
val = (U16 *) &data[count];
|
||||
|
|
@ -1384,7 +1384,7 @@ U32 LLViewerObject::processUpdateMessage(LLMessageSystem *mesgsys,
|
|||
U16_to_F32(val[VZ], -size, size)));
|
||||
|
||||
#ifdef LL_BIG_ENDIAN
|
||||
htonmemcpy(valswizzle, &data[count], MVT_U16Vec3, 6);
|
||||
htolememcpy(valswizzle, &data[count], MVT_U16Vec3, 6);
|
||||
val = valswizzle;
|
||||
#else
|
||||
val = (U16 *) &data[count];
|
||||
|
|
@ -1395,7 +1395,7 @@ U32 LLViewerObject::processUpdateMessage(LLMessageSystem *mesgsys,
|
|||
U16_to_F32(val[VZ], -size, size)));
|
||||
|
||||
#ifdef LL_BIG_ENDIAN
|
||||
htonmemcpy(valswizzle, &data[count], MVT_U16Quat, 4);
|
||||
htolememcpy(valswizzle, &data[count], MVT_U16Quat, 4);
|
||||
val = valswizzle;
|
||||
#else
|
||||
val = (U16 *) &data[count];
|
||||
|
|
@ -1407,7 +1407,7 @@ U32 LLViewerObject::processUpdateMessage(LLMessageSystem *mesgsys,
|
|||
new_rot.mQ[VW] = U16_to_F32(val[VW], -1.f, 1.f);
|
||||
|
||||
#ifdef LL_BIG_ENDIAN
|
||||
htonmemcpy(valswizzle, &data[count], MVT_U16Vec3, 6);
|
||||
htolememcpy(valswizzle, &data[count], MVT_U16Vec3, 6);
|
||||
val = valswizzle;
|
||||
#else
|
||||
val = (U16 *) &data[count];
|
||||
|
|
@ -1609,7 +1609,7 @@ U32 LLViewerObject::processUpdateMessage(LLMessageSystem *mesgsys,
|
|||
{
|
||||
case(60 + 16):
|
||||
// pull out collision normal for avatar
|
||||
htonmemcpy(collision_plane.mV, &data[count], MVT_LLVector4, sizeof(LLVector4));
|
||||
htolememcpy(collision_plane.mV, &data[count], MVT_LLVector4, sizeof(LLVector4));
|
||||
((LLVOAvatar*)this)->setFootPlane(collision_plane);
|
||||
count += sizeof(LLVector4);
|
||||
// fall through
|
||||
|
|
@ -1617,23 +1617,23 @@ U32 LLViewerObject::processUpdateMessage(LLMessageSystem *mesgsys,
|
|||
// this is a terse 32 update
|
||||
// pos
|
||||
this_update_precision = 32;
|
||||
htonmemcpy(new_pos_parent.mV, &data[count], MVT_LLVector3, sizeof(LLVector3));
|
||||
htolememcpy(new_pos_parent.mV, &data[count], MVT_LLVector3, sizeof(LLVector3));
|
||||
count += sizeof(LLVector3);
|
||||
// vel
|
||||
htonmemcpy((void*)getVelocity().mV, &data[count], MVT_LLVector3, sizeof(LLVector3));
|
||||
htolememcpy((void*)getVelocity().mV, &data[count], MVT_LLVector3, sizeof(LLVector3));
|
||||
count += sizeof(LLVector3);
|
||||
// acc
|
||||
htonmemcpy((void*)getAcceleration().mV, &data[count], MVT_LLVector3, sizeof(LLVector3));
|
||||
htolememcpy((void*)getAcceleration().mV, &data[count], MVT_LLVector3, sizeof(LLVector3));
|
||||
count += sizeof(LLVector3);
|
||||
// theta
|
||||
{
|
||||
LLVector3 vec;
|
||||
htonmemcpy(vec.mV, &data[count], MVT_LLVector3, sizeof(LLVector3));
|
||||
htolememcpy(vec.mV, &data[count], MVT_LLVector3, sizeof(LLVector3));
|
||||
new_rot.unpackFromVector3(vec);
|
||||
}
|
||||
count += sizeof(LLVector3);
|
||||
// omega
|
||||
htonmemcpy((void*)new_angv.mV, &data[count], MVT_LLVector3, sizeof(LLVector3));
|
||||
htolememcpy((void*)new_angv.mV, &data[count], MVT_LLVector3, sizeof(LLVector3));
|
||||
if (new_angv.isExactlyZero())
|
||||
{
|
||||
// reset rotation time
|
||||
|
|
@ -1649,7 +1649,7 @@ U32 LLViewerObject::processUpdateMessage(LLMessageSystem *mesgsys,
|
|||
break;
|
||||
case(32 + 16):
|
||||
// pull out collision normal for avatar
|
||||
htonmemcpy(collision_plane.mV, &data[count], MVT_LLVector4, sizeof(LLVector4));
|
||||
htolememcpy(collision_plane.mV, &data[count], MVT_LLVector4, sizeof(LLVector4));
|
||||
((LLVOAvatar*)this)->setFootPlane(collision_plane);
|
||||
count += sizeof(LLVector4);
|
||||
// fall through
|
||||
|
|
@ -1659,7 +1659,7 @@ U32 LLViewerObject::processUpdateMessage(LLMessageSystem *mesgsys,
|
|||
test_pos_parent.quantize16(-0.5f*size, 1.5f*size, MIN_HEIGHT, MAX_HEIGHT);
|
||||
|
||||
#ifdef LL_BIG_ENDIAN
|
||||
htonmemcpy(valswizzle, &data[count], MVT_U16Vec3, 6);
|
||||
htolememcpy(valswizzle, &data[count], MVT_U16Vec3, 6);
|
||||
val = valswizzle;
|
||||
#else
|
||||
val = (U16 *) &data[count];
|
||||
|
|
@ -1670,7 +1670,7 @@ U32 LLViewerObject::processUpdateMessage(LLMessageSystem *mesgsys,
|
|||
new_pos_parent.mV[VZ] = U16_to_F32(val[VZ], MIN_HEIGHT, MAX_HEIGHT);
|
||||
|
||||
#ifdef LL_BIG_ENDIAN
|
||||
htonmemcpy(valswizzle, &data[count], MVT_U16Vec3, 6);
|
||||
htolememcpy(valswizzle, &data[count], MVT_U16Vec3, 6);
|
||||
val = valswizzle;
|
||||
#else
|
||||
val = (U16 *) &data[count];
|
||||
|
|
@ -1681,7 +1681,7 @@ U32 LLViewerObject::processUpdateMessage(LLMessageSystem *mesgsys,
|
|||
U16_to_F32(val[VZ], -size, size));
|
||||
|
||||
#ifdef LL_BIG_ENDIAN
|
||||
htonmemcpy(valswizzle, &data[count], MVT_U16Vec3, 6);
|
||||
htolememcpy(valswizzle, &data[count], MVT_U16Vec3, 6);
|
||||
val = valswizzle;
|
||||
#else
|
||||
val = (U16 *) &data[count];
|
||||
|
|
@ -1692,7 +1692,7 @@ U32 LLViewerObject::processUpdateMessage(LLMessageSystem *mesgsys,
|
|||
U16_to_F32(val[VZ], -size, size));
|
||||
|
||||
#ifdef LL_BIG_ENDIAN
|
||||
htonmemcpy(valswizzle, &data[count], MVT_U16Quat, 8);
|
||||
htolememcpy(valswizzle, &data[count], MVT_U16Quat, 8);
|
||||
val = valswizzle;
|
||||
#else
|
||||
val = (U16 *) &data[count];
|
||||
|
|
@ -1704,7 +1704,7 @@ U32 LLViewerObject::processUpdateMessage(LLMessageSystem *mesgsys,
|
|||
new_rot.mQ[VW] = U16_to_F32(val[VW], -1.f, 1.f);
|
||||
|
||||
#ifdef LL_BIG_ENDIAN
|
||||
htonmemcpy(valswizzle, &data[count], MVT_U16Vec3, 6);
|
||||
htolememcpy(valswizzle, &data[count], MVT_U16Vec3, 6);
|
||||
val = valswizzle;
|
||||
#else
|
||||
val = (U16 *) &data[count];
|
||||
|
|
|
|||
|
|
@ -484,6 +484,8 @@ public:
|
|||
void updateInventoryLocal(LLInventoryItem* item, U8 key); // Update without messaging.
|
||||
void updateTextureInventory(LLViewerInventoryItem* item, U8 key, bool is_new);
|
||||
LLInventoryObject* getInventoryObject(const LLUUID& item_id);
|
||||
|
||||
// Get content except for root category
|
||||
void getInventoryContents(LLInventoryObject::object_list_t& objects);
|
||||
LLInventoryObject* getInventoryRoot();
|
||||
LLViewerInventoryItem* getInventoryItemByAsset(const LLUUID& asset_id);
|
||||
|
|
|
|||
|
|
@ -1011,6 +1011,12 @@ BOOL LLViewerWindow::handleAnyMouseClick(LLWindow *window, LLCoordGL pos, MASK
|
|||
mLeftMouseDown = down;
|
||||
buttonname = "Left Double Click";
|
||||
break;
|
||||
case LLMouseHandler::CLICK_BUTTON4:
|
||||
buttonname = "Button 4";
|
||||
break;
|
||||
case LLMouseHandler::CLICK_BUTTON5:
|
||||
buttonname = "Button 5";
|
||||
break;
|
||||
}
|
||||
|
||||
LLView::sMouseHandlerMessage.clear();
|
||||
|
|
@ -1188,7 +1194,7 @@ BOOL LLViewerWindow::handleRightMouseUp(LLWindow *window, LLCoordGL pos, MASK m
|
|||
BOOL LLViewerWindow::handleMiddleMouseDown(LLWindow *window, LLCoordGL pos, MASK mask)
|
||||
{
|
||||
BOOL down = TRUE;
|
||||
LLVoiceClient::getInstance()->middleMouseState(true);
|
||||
LLVoiceClient::getInstance()->updateMouseState(LLMouseHandler::CLICK_MIDDLE, true);
|
||||
handleAnyMouseClick(window,pos,mask,LLMouseHandler::CLICK_MIDDLE,down);
|
||||
|
||||
// Always handled as far as the OS is concerned.
|
||||
|
|
@ -1340,17 +1346,47 @@ LLWindowCallbacks::DragNDropResult LLViewerWindow::handleDragNDrop( LLWindow *wi
|
|||
|
||||
return result;
|
||||
}
|
||||
|
||||
|
||||
BOOL LLViewerWindow::handleMiddleMouseUp(LLWindow *window, LLCoordGL pos, MASK mask)
|
||||
{
|
||||
BOOL down = FALSE;
|
||||
LLVoiceClient::getInstance()->middleMouseState(false);
|
||||
LLVoiceClient::getInstance()->updateMouseState(LLMouseHandler::CLICK_MIDDLE, false);
|
||||
handleAnyMouseClick(window,pos,mask,LLMouseHandler::CLICK_MIDDLE,down);
|
||||
|
||||
// Always handled as far as the OS is concerned.
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
BOOL LLViewerWindow::handleOtherMouse(LLWindow *window, LLCoordGL pos, MASK mask, S32 button, bool down)
|
||||
{
|
||||
switch (button)
|
||||
{
|
||||
case 4:
|
||||
LLVoiceClient::getInstance()->updateMouseState(LLMouseHandler::CLICK_BUTTON4, down);
|
||||
handleAnyMouseClick(window, pos, mask, LLMouseHandler::CLICK_BUTTON4, down);
|
||||
break;
|
||||
case 5:
|
||||
LLVoiceClient::getInstance()->updateMouseState(LLMouseHandler::CLICK_BUTTON5, down);
|
||||
handleAnyMouseClick(window, pos, mask, LLMouseHandler::CLICK_BUTTON5, down);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
// Always handled as far as the OS is concerned.
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
BOOL LLViewerWindow::handleOtherMouseDown(LLWindow *window, LLCoordGL pos, MASK mask, S32 button)
|
||||
{
|
||||
return handleOtherMouse(window, pos, mask, button, TRUE);
|
||||
}
|
||||
|
||||
BOOL LLViewerWindow::handleOtherMouseUp(LLWindow *window, LLCoordGL pos, MASK mask, S32 button)
|
||||
{
|
||||
return handleOtherMouse(window, pos, mask, button, FALSE);
|
||||
}
|
||||
|
||||
// WARNING: this is potentially called multiple times per frame
|
||||
void LLViewerWindow::handleMouseMove(LLWindow *window, LLCoordGL pos, MASK mask)
|
||||
{
|
||||
|
|
@ -3775,9 +3811,8 @@ void LLViewerWindow::updateUI()
|
|||
LLRect screen_sticky_rect = mRootView->getLocalRect();
|
||||
S32 local_x, local_y;
|
||||
|
||||
//if (gSavedSettings.getBOOL("DebugShowXUINames"))
|
||||
static LLCachedControl<bool> debugShowXUINames(gSavedSettings, "DebugShowXUINames");
|
||||
if (debugShowXUINames)
|
||||
static LLCachedControl<bool> debug_show_xui_names(gSavedSettings, "DebugShowXUINames", 0);
|
||||
if (debug_show_xui_names)
|
||||
{
|
||||
LLToolTip::Params params;
|
||||
|
||||
|
|
|
|||
|
|
@ -193,7 +193,10 @@ public:
|
|||
/*virtual*/ BOOL handleRightMouseDown(LLWindow *window, LLCoordGL pos, MASK mask);
|
||||
/*virtual*/ BOOL handleRightMouseUp(LLWindow *window, LLCoordGL pos, MASK mask);
|
||||
/*virtual*/ BOOL handleMiddleMouseDown(LLWindow *window, LLCoordGL pos, MASK mask);
|
||||
/*virtual*/ BOOL handleMiddleMouseUp(LLWindow *window, LLCoordGL pos, MASK mask);
|
||||
/*virtual*/ BOOL handleMiddleMouseUp(LLWindow *window, LLCoordGL pos, MASK mask);
|
||||
/*virtual*/ BOOL handleOtherMouseDown(LLWindow *window, LLCoordGL pos, MASK mask, S32 button);
|
||||
/*virtual*/ BOOL handleOtherMouseUp(LLWindow *window, LLCoordGL pos, MASK mask, S32 button);
|
||||
BOOL handleOtherMouse(LLWindow *window, LLCoordGL pos, MASK mask, S32 button, bool down);
|
||||
/*virtual*/ LLWindowCallbacks::DragNDropResult handleDragNDrop(LLWindow *window, LLCoordGL pos, MASK mask, LLWindowCallbacks::DragNDropAction action, std::string data);
|
||||
void handleMouseMove(LLWindow *window, LLCoordGL pos, MASK mask);
|
||||
void handleMouseDragged(LLWindow *window, LLCoordGL pos, MASK mask);
|
||||
|
|
|
|||
|
|
@ -6322,7 +6322,7 @@ BOOL LLVOAvatar::processSingleAnimationStateChange( const LLUUID& anim_id, BOOL
|
|||
}
|
||||
else
|
||||
{
|
||||
LL_WARNS() << "Failed to start motion!" << LL_ENDL;
|
||||
LL_WARNS("Motion") << "Failed to start motion!" << LL_ENDL;
|
||||
}
|
||||
}
|
||||
else //stop animation
|
||||
|
|
@ -6429,7 +6429,7 @@ LLUUID LLVOAvatar::remapMotionID(const LLUUID& id)
|
|||
//-----------------------------------------------------------------------------
|
||||
BOOL LLVOAvatar::startMotion(const LLUUID& id, F32 time_offset)
|
||||
{
|
||||
LL_DEBUGS() << "motion requested " << id.asString() << " " << gAnimLibrary.animationName(id) << LL_ENDL;
|
||||
LL_DEBUGS("Motion") << "motion requested " << id.asString() << " " << gAnimLibrary.animationName(id) << LL_ENDL;
|
||||
|
||||
// <FS:Zi> Animation Overrider
|
||||
//LLUUID remap_id = remapMotionID(id, getSex());
|
||||
|
|
@ -6454,7 +6454,7 @@ BOOL LLVOAvatar::startMotion(const LLUUID& id, F32 time_offset)
|
|||
|
||||
if (remap_id != id)
|
||||
{
|
||||
LL_DEBUGS() << "motion resultant " << remap_id.asString() << " " << gAnimLibrary.animationName(remap_id) << LL_ENDL;
|
||||
LL_DEBUGS("Motion") << "motion resultant " << remap_id.asString() << " " << gAnimLibrary.animationName(remap_id) << LL_ENDL;
|
||||
}
|
||||
|
||||
if (isSelf() && remap_id == ANIM_AGENT_AWAY)
|
||||
|
|
@ -6470,7 +6470,7 @@ BOOL LLVOAvatar::startMotion(const LLUUID& id, F32 time_offset)
|
|||
//-----------------------------------------------------------------------------
|
||||
BOOL LLVOAvatar::stopMotion(const LLUUID& id, BOOL stop_immediate)
|
||||
{
|
||||
LL_DEBUGS() << "motion requested " << id.asString() << " " << gAnimLibrary.animationName(id) << LL_ENDL;
|
||||
LL_DEBUGS("Motion") << "Motion requested " << id.asString() << " " << gAnimLibrary.animationName(id) << LL_ENDL;
|
||||
|
||||
// <FS:Zi> Animation Overrider
|
||||
//LLUUID remap_id = remapMotionID(id);
|
||||
|
|
@ -6495,7 +6495,7 @@ BOOL LLVOAvatar::stopMotion(const LLUUID& id, BOOL stop_immediate)
|
|||
|
||||
if (remap_id != id)
|
||||
{
|
||||
LL_DEBUGS() << "motion resultant " << remap_id.asString() << " " << gAnimLibrary.animationName(remap_id) << LL_ENDL;
|
||||
LL_DEBUGS("Motion") << "motion resultant " << remap_id.asString() << " " << gAnimLibrary.animationName(remap_id) << LL_ENDL;
|
||||
}
|
||||
|
||||
if (isSelf())
|
||||
|
|
|
|||
|
|
@ -130,7 +130,7 @@ LLVoiceClient::LLVoiceClient()
|
|||
mPTTDirty(true),
|
||||
mPTT(true),
|
||||
mUsePTT(true),
|
||||
mPTTIsMiddleMouse(false),
|
||||
mPTTMouseButton(0),
|
||||
mPTTKey(0),
|
||||
mPTTIsToggle(false),
|
||||
mUserPTTState(false),
|
||||
|
|
@ -661,13 +661,22 @@ bool LLVoiceClient::getPTTIsToggle()
|
|||
|
||||
void LLVoiceClient::setPTTKey(std::string &key)
|
||||
{
|
||||
// Value is stored as text for readability
|
||||
if(key == "MiddleMouse")
|
||||
{
|
||||
mPTTIsMiddleMouse = true;
|
||||
mPTTMouseButton = LLMouseHandler::CLICK_MIDDLE;
|
||||
}
|
||||
else if(key == "MouseButton4")
|
||||
{
|
||||
mPTTMouseButton = LLMouseHandler::CLICK_BUTTON4;
|
||||
}
|
||||
else if (key == "MouseButton5")
|
||||
{
|
||||
mPTTMouseButton = LLMouseHandler::CLICK_BUTTON5;
|
||||
}
|
||||
else
|
||||
{
|
||||
mPTTIsMiddleMouse = false;
|
||||
mPTTMouseButton = 0;
|
||||
if(!LLKeyboard::keyFromString(key, &mPTTKey))
|
||||
{
|
||||
// If the call failed, don't match any key.
|
||||
|
|
@ -704,7 +713,7 @@ void LLVoiceClient::keyDown(KEY key, MASK mask)
|
|||
return;
|
||||
}
|
||||
|
||||
if (!mPTTIsMiddleMouse && LLAgent::isActionAllowed("speak") && (key == mPTTKey))
|
||||
if (mPTTMouseButton == 0 && LLAgent::isActionAllowed("speak") && (key == mPTTKey))
|
||||
{
|
||||
bool down = gKeyboard->getKeyDown(mPTTKey);
|
||||
if (down)
|
||||
|
|
@ -716,7 +725,7 @@ void LLVoiceClient::keyDown(KEY key, MASK mask)
|
|||
}
|
||||
void LLVoiceClient::keyUp(KEY key, MASK mask)
|
||||
{
|
||||
if (!mPTTIsMiddleMouse && (key == mPTTKey))
|
||||
if (mPTTMouseButton == 0 && (key == mPTTKey))
|
||||
{
|
||||
bool down = gKeyboard->getKeyDown(mPTTKey);
|
||||
if (!down)
|
||||
|
|
@ -725,9 +734,9 @@ void LLVoiceClient::keyUp(KEY key, MASK mask)
|
|||
}
|
||||
}
|
||||
}
|
||||
void LLVoiceClient::middleMouseState(bool down)
|
||||
void LLVoiceClient::updateMouseState(S32 click, bool down)
|
||||
{
|
||||
if(mPTTIsMiddleMouse && LLAgent::isActionAllowed("speak"))
|
||||
if(mPTTMouseButton == click && LLAgent::isActionAllowed("speak"))
|
||||
{
|
||||
inputUserControlState(down);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -447,8 +447,8 @@ public:
|
|||
// PTT key triggering
|
||||
void keyDown(KEY key, MASK mask);
|
||||
void keyUp(KEY key, MASK mask);
|
||||
void middleMouseState(bool down);
|
||||
|
||||
void updateMouseState(S32 click, bool down);
|
||||
|
||||
boost::signals2::connection MicroChangedCallback(const micro_changed_signal_t::slot_type& cb ) { return mMicroChangedSignal.connect(cb); }
|
||||
|
||||
// <FS:Ansariel> Add callback for user volume change
|
||||
|
|
@ -520,7 +520,7 @@ protected:
|
|||
bool mPTT;
|
||||
|
||||
bool mUsePTT;
|
||||
bool mPTTIsMiddleMouse;
|
||||
S32 mPTTMouseButton;
|
||||
KEY mPTTKey;
|
||||
bool mPTTIsToggle;
|
||||
bool mUserPTTState;
|
||||
|
|
|
|||
|
|
@ -11,6 +11,16 @@
|
|||
<on_click
|
||||
function="Gesture.Action.ToogleActiveState" />
|
||||
</menu_item_call>
|
||||
<menu_item_call
|
||||
label="Rename"
|
||||
layout="topleft"
|
||||
name="rename">
|
||||
<on_click
|
||||
function="Gesture.Action.Rename" />
|
||||
<on_enable
|
||||
function="Gesture.EnableAction"
|
||||
parameter="rename_gesture" />
|
||||
</menu_item_call>
|
||||
<menu_item_call
|
||||
label="Copy"
|
||||
layout="topleft"
|
||||
|
|
|
|||
|
|
@ -3207,6 +3207,29 @@ See https://wiki.secondlife.com/wiki/Adding_Spelling_Dictionaries
|
|||
</form>
|
||||
</notification>
|
||||
|
||||
<notification
|
||||
icon="alertmodal.tga"
|
||||
label="Rename Gesture"
|
||||
name="RenameGesture"
|
||||
type="alertmodal">
|
||||
New gesture name:
|
||||
<tag>confirm</tag>
|
||||
<form name="form">
|
||||
<input name="new_name" type="text" width="300">
|
||||
[NAME]
|
||||
</input>
|
||||
<button
|
||||
default="true"
|
||||
index="0"
|
||||
name="OK"
|
||||
text="OK"/>
|
||||
<button
|
||||
index="1"
|
||||
name="Cancel"
|
||||
text="Cancel"/>
|
||||
</form>
|
||||
</notification>
|
||||
|
||||
<notification
|
||||
icon="alertmodal.tga"
|
||||
name="RemoveFromFriends"
|
||||
|
|
|
|||
|
|
@ -13,6 +13,14 @@
|
|||
name="middle_mouse">
|
||||
Middle Mouse
|
||||
</panel.string>
|
||||
<panel.string
|
||||
name="button4_mouse">
|
||||
Mouse Button 4
|
||||
</panel.string>
|
||||
<panel.string
|
||||
name="button5_mouse">
|
||||
Mouse Button 5
|
||||
</panel.string>
|
||||
|
||||
<tab_container
|
||||
label="Firestorm Prefs"
|
||||
|
|
|
|||
|
|
@ -1090,6 +1090,7 @@ If you continue to receive this message, please contact Second Life support for
|
|||
<string name="Debits">Debits</string>
|
||||
<string name="Total">Total</string>
|
||||
<string name="NoGroupDataFound">No group data found for group </string>
|
||||
<string name="AlreadyInGroup">You are already in this group </string>
|
||||
|
||||
<!-- floater IM bonus_info: When a Linden with Admin/god status receives a new IM this displays the estate (Mainland vs. teen grid) of the source avatar.
|
||||
This is to help Lindens when answering questions. -->
|
||||
|
|
|
|||
|
|
@ -1432,9 +1432,9 @@
|
|||
<usetemplate name="okcancelbuttons" notext="Продолжить" yestext="Создать аккаунт..."/>
|
||||
</notification>
|
||||
<notification name="LoginPacketNeverReceived">
|
||||
Возникли неполадки при подключении. Возможно, проблема с вашим подключением к интернету или [SECOND_LIFE_GRID].
|
||||
Возникли неполадки при подключении. Возможно, проблема с вашим подключением к интернету или [SECOND_LIFE_GRID] временно недоступна.
|
||||
|
||||
Варианты ваших действий: проверьте подключение к интернету и повторите попытку через несколько минут, нажмите кнопку "Справка" для перехода к [SUPPORT_SITE] или кнопку "Телепортация", чтобы телепортироваться домой.
|
||||
Вы можете проверить подключение к интернету, повторить попытку через несколько минут, нажать кнопку «Справка» для перехода на [SUPPORT_SITE] или нажать кнопку «Телепортация», чтобы телепортироваться домой.
|
||||
<url name="url">
|
||||
http://secondlife.com/support/
|
||||
</url>
|
||||
|
|
|
|||
Loading…
Reference in New Issue