From c659c65d02d4d92b614ccdf2e2a4a0dcf859a8cd Mon Sep 17 00:00:00 2001 From: Jacek Antonelli Date: Fri, 15 Aug 2008 23:44:49 -0500 Subject: Second Life viewer sources 1.13.3.2 --- linden/indra/indra_complete/indra_complete.sln | 1 - linden/indra/llaudio/audioengine_fmod.cpp | 2 +- linden/indra/llcommon/llassettype.cpp | 16 +-- linden/indra/llcommon/llassettype.h | 8 +- linden/indra/llcommon/llavatarconstants.h | 12 +++ linden/indra/llcommon/llsdutil.cpp | 11 +++ linden/indra/llcommon/llsdutil.h | 3 + linden/indra/llcommon/lluri.cpp | 84 +++++++++++++++- linden/indra/llcommon/lluri.h | 7 ++ linden/indra/llcommon/llversion.h | 4 +- linden/indra/llmath/llrand.cpp | 107 +++++++++++++++++++-- linden/indra/llmessage/llhttpclient.cpp | 9 +- linden/indra/llmessage/llhttpclient.h | 4 +- linden/indra/llvfs/llvfs.cpp | 66 +++++++++++-- linden/indra/llvfs/llvfs.h | 1 + .../indra/newview/English.lproj/InfoPlist.strings | 4 +- linden/indra/newview/Info-SecondLife.plist | 2 +- linden/indra/newview/llfloateravatarinfo.cpp | 6 +- linden/indra/newview/llfloaterland.cpp | 6 +- linden/indra/newview/llfloaterproperties.cpp | 1 + linden/indra/newview/llgivemoney.cpp | 4 +- linden/indra/newview/llhudeffect.cpp | 1 + linden/indra/newview/llhudmanager.cpp | 10 +- linden/indra/newview/llpanelavatar.cpp | 81 ++++++---------- linden/indra/newview/llpanelavatar.h | 3 +- linden/indra/newview/llpaneldirbrowser.cpp | 48 ++------- linden/indra/newview/llpaneldirpeople.cpp | 5 - linden/indra/newview/llprefsim.cpp | 39 ++++---- linden/indra/newview/llviewermenu.cpp | 48 ++++----- linden/indra/newview/llviewermessage.cpp | 2 +- linden/indra/newview/releasenotes.txt | 12 +++ linden/indra/newview/res/newViewRes.rc | 8 +- .../newview/skins/xui/en-us/floater_directory.xml | 10 +- .../indra/newview/skins/xui/en-us/panel_avatar.xml | 16 +-- .../skins/xui/en-us/panel_preferences_im.xml | 6 +- linden/scripts/messages/message_template.msg | 16 ++- 36 files changed, 442 insertions(+), 221 deletions(-) diff --git a/linden/indra/indra_complete/indra_complete.sln b/linden/indra/indra_complete/indra_complete.sln index f4a8647..c78dba2 100644 --- a/linden/indra/indra_complete/indra_complete.sln +++ b/linden/indra/indra_complete/indra_complete.sln @@ -504,7 +504,6 @@ Global {E9F5BD55-F8E8-4C61-B9B5-CCE7C1048241}.ReleaseForDownload.ActiveCfg = Release|Win32 {E9F5BD55-F8E8-4C61-B9B5-CCE7C1048241}.ReleaseForDownload.Build.0 = Release|Win32 {E9F5BD55-F8E8-4C61-B9B5-CCE7C1048241}.ReleaseNoOpt.ActiveCfg = ReleaseNoOpt|Win32 - {E9F5BD55-F8E8-4C61-B9B5-CCE7C1048241}.ReleaseNoOpt.Build.0 = ReleaseNoOpt|Win32 {023011F7-3ADB-49D3-9EC5-6D392F6D15FE}.Debug.ActiveCfg = Debug|Win32 {023011F7-3ADB-49D3-9EC5-6D392F6D15FE}.Debug.Build.0 = Debug|Win32 {023011F7-3ADB-49D3-9EC5-6D392F6D15FE}.Release.ActiveCfg = Release|Win32 diff --git a/linden/indra/llaudio/audioengine_fmod.cpp b/linden/indra/llaudio/audioengine_fmod.cpp index a69212e..0e8ea67 100644 --- a/linden/indra/llaudio/audioengine_fmod.cpp +++ b/linden/indra/llaudio/audioengine_fmod.cpp @@ -1136,7 +1136,7 @@ void * F_CALLBACKAPI windCallback(void *originalbuffer, void *newbuffer, int len double nextSample; // start with white noise - nextSample = llclamp((ll_frand(2.0f) - 1.0f), -1.0f, 1.0f); + nextSample = ll_frand(2.0f) - 1.0f; #if 1 // LLAE_WIND_PINK apply pinking filter gbuf0 = 0.997f * gbuf0 + 0.0126502f * nextSample; diff --git a/linden/indra/llcommon/llassettype.cpp b/linden/indra/llcommon/llassettype.cpp index cf38f7a..051092e 100644 --- a/linden/indra/llcommon/llassettype.cpp +++ b/linden/indra/llcommon/llassettype.cpp @@ -27,9 +27,11 @@ #include "linden_common.h" +#include "llassettype.h" + #include -#include "llassettype.h" +#include "llstring.h" #include "lltimer.h" // I added lookups for exact text of asset type enums in addition to the ones below, so shoot me. -Steve @@ -68,9 +70,9 @@ asset_info_t asset_types[] = { LLAssetType::AT_NONE, "NONE" }, }; -LLAssetType::EType LLAssetType::getType(const LLString& sin) +LLAssetType::EType LLAssetType::getType(const std::string& sin) { - LLString s = sin; + std::string s = sin; LLString::toUpper(s); for (S32 idx = 0; ;idx++) { @@ -83,17 +85,17 @@ LLAssetType::EType LLAssetType::getType(const LLString& sin) return LLAssetType::AT_NONE; } -LLString LLAssetType::getDesc(LLAssetType::EType type) +std::string LLAssetType::getDesc(LLAssetType::EType type) { for (S32 idx = 0; ;idx++) { asset_info_t* info = asset_types + idx; if (type == info->type) - return LLString(info->desc); + return info->desc; if (info->type == LLAssetType::AT_NONE) break; } - return LLString("BAD TYPE"); + return "BAD TYPE"; } //============================================================================ @@ -225,7 +227,7 @@ EDragAndDropType LLAssetType::lookupDragAndDropType( EType asset ) // static. Generate a good default description void LLAssetType::generateDescriptionFor(LLAssetType::EType type, - LLString& desc) + std::string& desc) { const S32 BUF_SIZE = 30; char time_str[BUF_SIZE]; /* Flawfinder: ignore */ diff --git a/linden/indra/llcommon/llassettype.h b/linden/indra/llcommon/llassettype.h index c62769a..67dc3ef 100644 --- a/linden/indra/llcommon/llassettype.h +++ b/linden/indra/llcommon/llassettype.h @@ -28,6 +28,8 @@ #ifndef LL_LLASSETTYPE #define LL_LLASSETTYPE +#include + #include "stdenums.h" // for EDragAndDropType class LLAssetType @@ -150,10 +152,10 @@ public: // Generate a good default description. You may want to add a verb // or agent name after this depending on your application. static void generateDescriptionFor(LLAssetType::EType type, - LLString& desc); + std::string& desc); - static EType getType(const LLString& sin); - static LLString getDesc(EType type); + static EType getType(const std::string& sin); + static std::string getDesc(EType type); private: // don't instantiate or derive one of these objects diff --git a/linden/indra/llcommon/llavatarconstants.h b/linden/indra/llcommon/llavatarconstants.h index f56e9ab..3335949 100644 --- a/linden/indra/llcommon/llavatarconstants.h +++ b/linden/indra/llcommon/llavatarconstants.h @@ -39,5 +39,17 @@ const char* const BLACKLIST_PROFILE_WEB_URL = "http://secondlife.com/app/webdisa // Maximum number of avatar picks const S32 MAX_AVATAR_PICKS = 10; +// For Flags in AvatarPropertiesReply +const U32 AVATAR_ALLOW_PUBLISH = 0x1 << 0; // whether profile is externally visible or not +const U32 AVATAR_MATURE_PUBLISH = 0x1 << 1; // profile is "mature" +const U32 AVATAR_IDENTIFIED = 0x1 << 2; // whether avatar has provided payment info +const U32 AVATAR_TRANSACTED = 0x1 << 3; // whether avatar has actively used payment info +const U32 AVATAR_ONLINE = 0x1 << 4; // the online status of this avatar, if known. + +static const std::string VISIBILITY_DEFAULT("default"); +static const std::string VISIBILITY_HIDDEN("hidden"); +static const std::string VISIBILITY_VISIBLE("visible"); +static const std::string VISIBILITY_INVISIBLE("invisible"); + #endif diff --git a/linden/indra/llcommon/llsdutil.cpp b/linden/indra/llcommon/llsdutil.cpp index f111039..0f295a1 100644 --- a/linden/indra/llcommon/llsdutil.cpp +++ b/linden/indra/llcommon/llsdutil.cpp @@ -222,3 +222,14 @@ U32 ll_ipaddr_from_sd(const LLSD& sd) memcpy(&ret, &(v[0]), 4); /* Flawfinder: ignore */ return ret; } + +// Converts an LLSD binary to an LLSD string +LLSD ll_string_from_binary(const LLSD& sd) +{ + std::vector value = sd.asBinary(); + char* c_str = new char[value.size() + 1]; + memcpy(c_str, &value[0], value.size()); + c_str[value.size()] = '\0'; + + return c_str; +} diff --git a/linden/indra/llcommon/llsdutil.h b/linden/indra/llcommon/llsdutil.h index 555d7fb..ca6b76f 100644 --- a/linden/indra/llcommon/llsdutil.h +++ b/linden/indra/llcommon/llsdutil.h @@ -70,4 +70,7 @@ U64 ll_U64_from_sd(const LLSD& sd); LLSD ll_sd_from_ipaddr(const U32); U32 ll_ipaddr_from_sd(const LLSD& sd); +// Binary to string +LLSD ll_string_from_binary(const LLSD& sd); + #endif // LL_LLSDUTIL_H diff --git a/linden/indra/llcommon/lluri.cpp b/linden/indra/llcommon/lluri.cpp index 2eb0f11..e697ec1 100644 --- a/linden/indra/llcommon/lluri.cpp +++ b/linden/indra/llcommon/lluri.cpp @@ -28,9 +28,13 @@ */ #include "linden_common.h" + +#include "llapp.h" #include "lluri.h" #include "llsd.h" +#include "../llmath/lluuid.h" + // uric = reserved | unreserved | escaped // reserved = ";" | "/" | "?" | ":" | "@" | "&" | "=" | "+" | "$" | "," // unreserved = alphanum | mark @@ -372,9 +376,21 @@ LLURI LLURI::buildHTTP(const std::string& host_port, const LLSD& path) { LLURI result; - result.mScheme = "HTTP"; + // TODO: deal with '/' '?' '#' in host_port - result.mEscapedAuthority = "//" + escape(host_port); + S32 index = host_port.find("://"); + if (index != host_port.npos) + { + // The scheme is part of the host_port + result.mScheme = ""; + result.mEscapedAuthority = escape(host_port); + } + else + { + result.mScheme = "HTTP"; + result.mEscapedAuthority = "//" + escape(host_port); + } + if (path.isArray()) { // break out and escape each path component @@ -416,6 +432,70 @@ LLURI LLURI::buildHTTP(const std::string& host_port, return result; } +// static +LLURI LLURI::buildAgentPresenceURI(const LLUUID& agent_id, LLApp* app) +{ + std::string host = "localhost:12040"; + + if (app) + { + host = app->getOption("backbone-host-port").asString(); + } + + LLSD path = LLSD::emptyArray(); + path.append("agent"); + path.append(agent_id); + path.append("presence"); + + return buildHTTP(host, path); +} + +// static +LLURI LLURI::buildBulkAgentPresenceURI(LLApp* app) +{ + std::string host = "localhost:12040"; + + if (app) + { + host = app->getOption("backbone-host-port").asString(); + } + + LLSD path = LLSD::emptyArray(); + path.append("agent"); + path.append("presence"); + + return buildHTTP(host, path); +} + +// static +LLURI LLURI::buildAgentSessionURI(const LLUUID& agent_id, LLApp* app) +{ + std::string host = "localhost:12040"; + + if (app) + { + host = app->getOption("backbone-host-port").asString(); + } + + LLSD path = LLSD::emptyArray(); + path.append("agent"); + path.append(agent_id); + path.append("session"); + + return buildHTTP(host, path); +} + +// static +LLURI LLURI::buildAgentLoginInfoURI(const LLUUID& agent_id, const std::string& dataserver) +{ + LLSD path = LLSD::emptyArray(); + path.append("agent"); + path.append(agent_id); + path.append("logininfo"); + + return buildHTTP(dataserver, path); +} + std::string LLURI::asString() const { if (mScheme.empty()) diff --git a/linden/indra/llcommon/lluri.h b/linden/indra/llcommon/lluri.h index 52f07bf..f69472f 100644 --- a/linden/indra/llcommon/lluri.h +++ b/linden/indra/llcommon/lluri.h @@ -33,6 +33,8 @@ #include class LLSD; +class LLUUID; +class LLApp; /** * @@ -80,6 +82,11 @@ public: static std::string escape(const std::string& str); static std::string unescape(const std::string& str); + // Functions for building specific URIs for web services + static LLURI buildAgentPresenceURI(const LLUUID& agent_id, LLApp* app); + static LLURI buildBulkAgentPresenceURI(LLApp* app); + static LLURI buildAgentSessionURI(const LLUUID& agent_id, LLApp* app); + static LLURI buildAgentLoginInfoURI(const LLUUID& agent_id, const std::string& dataserver); private: std::string mScheme; std::string mEscapedOpaque; diff --git a/linden/indra/llcommon/llversion.h b/linden/indra/llcommon/llversion.h index 9cb01a3..af21f72 100644 --- a/linden/indra/llcommon/llversion.h +++ b/linden/indra/llcommon/llversion.h @@ -33,8 +33,8 @@ // MUST ALSO change version number in secondlife setup.nsi const S32 LL_VERSION_MAJOR = 1; const S32 LL_VERSION_MINOR = 13; -const S32 LL_VERSION_PATCH = 2; -const S32 LL_VERSION_BUILD = 15; +const S32 LL_VERSION_PATCH = 3; +const S32 LL_VERSION_BUILD = 2; diff --git a/linden/indra/llmath/llrand.cpp b/linden/indra/llmath/llrand.cpp index 4c214c4..c0f03d2 100644 --- a/linden/indra/llmath/llrand.cpp +++ b/linden/indra/llmath/llrand.cpp @@ -30,34 +30,129 @@ #include "llrand.h" #include "lluuid.h" +/** + * Through analysis, we have decided that we want to take values which + * are close enough to 1.0 to map back to 0.0. We came to this + * conclusion from noting that: + * + * [0.0, 1.0) + * + * when scaled to the integer set: + * + * [0, 4) + * + * there is some value close enough to 1.0 that when multiplying by 4, + * gets truncated to 4. Therefore: + * + * [0,1-eps] => 0 + * [1,2-eps] => 1 + * [2,3-eps] => 2 + * [3,4-eps] => 3 + * + * So 0 gets uneven distribution if we simply clamp. The actual + * clamp utilized in this file is to map values out of range back + * to 0 to restore uniform distribution. + * + * Also, for clamping floats when asking for a distribution from + * [0.0,g) we have determined that for values of g < 0.5, then + * rand*g=g, which is not the desired result. As above, we clamp to 0 + * to restore uniform distribution. + */ + +// *NOTE: The system rand implementation is probably not correct. +#define LL_USE_SYSTEM_RAND 0 + +#if LL_USE_SYSTEM_RAND +#include +#endif + +#if LL_USE_SYSTEM_RAND +class LLSeedRand +{ +public: + LLSeedRand() + { +#if LL_WINDOWS + srand(LLUUID::getRandomSeed()); +#else + srand48(LLUUID::getRandomSeed()); +#endif + } +}; +static LLSeedRand sRandomSeeder; +inline F64 ll_internal_random_double() +{ +#if LL_WINDOWS + return (F64)rand() / (F64)RAND_MAX; +#else + return drand48(); +#endif +} +inline F32 ll_internal_random_float() +{ +#if LL_WINDOWS + return (F32)rand() / (F32)RAND_MAX; +#else + return (F32)drand48(); +#endif +} +#else static LLRandLagFib2281 gRandomGenerator(LLUUID::getRandomSeed()); +inline F64 ll_internal_random_double() +{ + // *HACK: Through experimentation, we have found that dual core + // CPUs (or at least multi-threaded processes) seem to + // occasionally give an obviously incorrect random number -- like + // 5^15 or something. Sooooo, clamp it as described above. + F64 rv = gRandomGenerator(); + if(!((rv >= 0.0) && (rv < 1.0))) return 0.0; + return rv; +} + +inline F32 ll_internal_random_float() +{ + // The clamping rules are described above. + F32 rv = (F32)gRandomGenerator(); + if(!((rv >= 0.0f) && (rv < 1.0f))) return 0.0f; + return rv; +} +#endif S32 ll_rand() { - return (S32)(gRandomGenerator() * RAND_MAX); + return ll_rand(RAND_MAX); } S32 ll_rand(S32 val) { - return (S32)(gRandomGenerator() * val); + // The clamping rules are described above. + S32 rv = (S32)(ll_internal_random_double() * val); + if(rv == val) return 0; + return rv; } F32 ll_frand() { - return (F32)gRandomGenerator(); + return ll_internal_random_float(); } F32 ll_frand(F32 val) { - return (F32)gRandomGenerator() * val; + // The clamping rules are described above. + F32 rv = ll_internal_random_float() * val; + if(rv >= val) return 0.0f; + return rv; } F64 ll_drand() { - return gRandomGenerator(); + return ll_internal_random_double(); } F64 ll_drand(F64 val) { - return gRandomGenerator() * val; + // The clamping rules are described above. + F64 rv = ll_internal_random_double() * val; + if(rv >= val) return 0.0; + return rv; } diff --git a/linden/indra/llmessage/llhttpclient.cpp b/linden/indra/llmessage/llhttpclient.cpp index 5f75e59..d94918e 100644 --- a/linden/indra/llmessage/llhttpclient.cpp +++ b/linden/indra/llmessage/llhttpclient.cpp @@ -26,8 +26,10 @@ */ #include "linden_common.h" -#include "llassetstorage.h" + #include "llhttpclient.h" + +#include "llassetstorage.h" #include "lliopipe.h" #include "llurlrequest.h" #include "llbufferstream.h" @@ -251,6 +253,11 @@ void LLHTTPClient::post(const std::string& url, const LLSD& body, ResponderPtr r request(url, LLURLRequest::HTTP_POST, new LLSDInjector(body), responder); } +void LLHTTPClient::del(const std::string& url, ResponderPtr responder) +{ + request(url, LLURLRequest::HTTP_DELETE, NULL, responder); +} + #if 1 void LLHTTPClient::postFile(const std::string& url, const std::string& filename, ResponderPtr responder) { diff --git a/linden/indra/llmessage/llhttpclient.h b/linden/indra/llmessage/llhttpclient.h index c6b68b2..d48d084 100644 --- a/linden/indra/llmessage/llhttpclient.h +++ b/linden/indra/llmessage/llhttpclient.h @@ -35,8 +35,10 @@ #include #include -#include "llassetstorage.h" +#include "llassettype.h" + +class LLUUID; class LLPumpIO; class LLSD; diff --git a/linden/indra/llvfs/llvfs.cpp b/linden/indra/llvfs/llvfs.cpp index ed1c313..bb211df 100644 --- a/linden/indra/llvfs/llvfs.cpp +++ b/linden/indra/llvfs/llvfs.cpp @@ -1957,6 +1957,60 @@ void LLVFS::dumpStatistics() } // Debug Only! +LLString get_extension(LLAssetType::EType type) +{ + LLString extension; + switch(type) + { + case LLAssetType::AT_TEXTURE: + extension = ".jp2"; // ".j2c"; // IrfanView recognizes .jp2 -sjb + break; + case LLAssetType::AT_SOUND: + extension = ".ogg"; + break; + case LLAssetType::AT_SOUND_WAV: + extension = ".wav"; + break; + case LLAssetType::AT_TEXTURE_TGA: + extension = ".tga"; + break; + case LLAssetType::AT_IMAGE_JPEG: + extension = ".jpeg"; + break; + case LLAssetType::AT_ANIMATION: + extension = ".lla"; + break; + default: + extension = ".data"; + break; + } + return extension; +} + +void LLVFS::listFiles() +{ + lockData(); + + for (fileblock_map::iterator it = mFileBlocks.begin(); it != mFileBlocks.end(); ++it) + { + LLVFSFileSpecifier file_spec = it->first; + LLVFSFileBlock *file_block = it->second; + S32 length = file_block->mLength; + S32 size = file_block->mSize; + if (length != BLOCK_LENGTH_INVALID && size > 0) + { + LLUUID id = file_spec.mFileID; + LLString extension = get_extension(file_spec.mFileType); + llinfos << " File: " << id + << " Type: " << LLAssetType::getDesc(file_spec.mFileType) + << " Size: " << size + << llendl; + } + } + + unlockData(); +} + #include "llapr.h" void LLVFS::dumpFiles() { @@ -1978,16 +2032,8 @@ void LLVFS::dumpFiles() getData(id, type, buffer, 0, size); lockData(); - LLString extention = ".data"; - switch(type) - { - case LLAssetType::AT_TEXTURE: - extention = ".jp2"; // ".j2c"; // IrfanView recognizes .jp2 -sjb - break; - default: - break; - } - LLString filename = id.getString() + extention; + LLString extension = get_extension(type); + LLString filename = id.getString() + extension; llinfos << " Writing " << filename << llendl; apr_file_t* file = ll_apr_file_open(filename, LL_APR_WB); ll_apr_file_write(file, buffer, size); diff --git a/linden/indra/llvfs/llvfs.h b/linden/indra/llvfs/llvfs.h index f7affd4..4598c07 100644 --- a/linden/indra/llvfs/llvfs.h +++ b/linden/indra/llvfs/llvfs.h @@ -115,6 +115,7 @@ public: void dumpMap(); void dumpLockCounts(); void dumpStatistics(); + void listFiles(); void dumpFiles(); protected: diff --git a/linden/indra/newview/English.lproj/InfoPlist.strings b/linden/indra/newview/English.lproj/InfoPlist.strings index 2f68a02..6ef64e4 100644 --- a/linden/indra/newview/English.lproj/InfoPlist.strings +++ b/linden/indra/newview/English.lproj/InfoPlist.strings @@ -1,5 +1,5 @@ /* Localized versions of Info.plist keys */ CFBundleName = "Second Life"; -CFBundleShortVersionString = "Second Life version 1.13.2.15"; -CFBundleGetInfoString = "Second Life version 1.13.2.15, Copyright 2004-2006 Linden Research, Inc."; +CFBundleShortVersionString = "Second Life version 1.13.3.2"; +CFBundleGetInfoString = "Second Life version 1.13.3.2, Copyright 2004-2006 Linden Research, Inc."; diff --git a/linden/indra/newview/Info-SecondLife.plist b/linden/indra/newview/Info-SecondLife.plist index 3e6c65e..6e1de8b 100644 --- a/linden/indra/newview/Info-SecondLife.plist +++ b/linden/indra/newview/Info-SecondLife.plist @@ -32,7 +32,7 @@ CFBundleVersion - 1.13.2.15 + 1.13.3.2 CSResourcesFileMapped diff --git a/linden/indra/newview/llfloateravatarinfo.cpp b/linden/indra/newview/llfloateravatarinfo.cpp index a429cc2..959967a 100644 --- a/linden/indra/newview/llfloateravatarinfo.cpp +++ b/linden/indra/newview/llfloateravatarinfo.cpp @@ -121,7 +121,7 @@ BOOL LLFloaterAvatarInfo::postBuild() LLFloaterAvatarInfo::LLFloaterAvatarInfo(const std::string& name, const LLRect &rect, const LLUUID &avatar_id) : LLPreview(name, rect, FLOATER_TITLE, LLUUID::null, LLUUID::null), mAvatarID( avatar_id ), - mSuggestedOnlineStatus(ONLINE_STATUS_UNKNOWN) + mSuggestedOnlineStatus(ONLINE_STATUS_NO) { mAutoFocus = TRUE; @@ -182,7 +182,7 @@ void LLFloaterAvatarInfo::showFromObject(const LLUUID &avatar_id, std::string ta floater = new LLFloaterAvatarInfo("avatarinfo", FAI_RECT, avatar_id); floater->center(); - floater->mPanelAvatarp->setAvatarID(avatar_id, "", ONLINE_STATUS_UNKNOWN); + floater->mPanelAvatarp->setAvatarID(avatar_id, "", ONLINE_STATUS_NO); } @@ -210,7 +210,7 @@ void LLFloaterAvatarInfo::showFromDirectory(const LLUUID &avatar_id) floater = new LLFloaterAvatarInfo("avatarinfo", FAI_RECT, avatar_id); floater->center(); - floater->mPanelAvatarp->setAvatarID(avatar_id, "", ONLINE_STATUS_UNKNOWN); + floater->mPanelAvatarp->setAvatarID(avatar_id, "", ONLINE_STATUS_NO); floater->open(); } if(floater) diff --git a/linden/indra/newview/llfloaterland.cpp b/linden/indra/newview/llfloaterland.cpp index 22686fb..f19baa9 100644 --- a/linden/indra/newview/llfloaterland.cpp +++ b/linden/indra/newview/llfloaterland.cpp @@ -1018,8 +1018,8 @@ void LLPanelLandGeneral::onCommitAny(LLUICtrl *ctrl, void *userdata) } // Extract data from UI - std::string name = panelp->mEditName->getText(); - std::string desc = panelp->mEditDesc->getText(); + std::string name = panelp->mEditName->getText(); + std::string desc = panelp->mEditDesc->getText(); // Valid data from UI @@ -1123,7 +1123,7 @@ BOOL LLPanelLandObjects::postBuild() mCleanOtherObjectsTime = LLUICtrlFactory::getLineEditorByName(this, "clean other time"); mCleanOtherObjectsTime->setFocusLostCallback(onLostFocus); - childSetPrevalidate("clean other time", LLLineEditor::prevalidatePrintableNotPipe); + childSetPrevalidate("clean other time", LLLineEditor::prevalidateNonNegativeS32); childSetUserData("clean other time", this); mOwnerListText = LLUICtrlFactory::getTextBoxByName(this, "Object Owners:"); diff --git a/linden/indra/newview/llfloaterproperties.cpp b/linden/indra/newview/llfloaterproperties.cpp index abae955..8be2ce5 100644 --- a/linden/indra/newview/llfloaterproperties.cpp +++ b/linden/indra/newview/llfloaterproperties.cpp @@ -164,6 +164,7 @@ LLFloaterProperties::LLFloaterProperties(const std::string& name, const LLRect& childSetPrevalidate("LabelItemName",&LLLineEditor::prevalidatePrintableNotPipe); childSetCommitCallback("LabelItemName",onCommitName,this); childSetPrevalidate("LabelItemDesc",&LLLineEditor::prevalidatePrintableNotPipe); + childSetCommitCallback("LabelItemDesc", onCommitDescription, this); // Creator information childSetAction("BtnCreator",onClickCreator,this); // owner information diff --git a/linden/indra/newview/llgivemoney.cpp b/linden/indra/newview/llgivemoney.cpp index ce8cc06..d3c7598 100644 --- a/linden/indra/newview/llgivemoney.cpp +++ b/linden/indra/newview/llgivemoney.cpp @@ -153,7 +153,7 @@ LLFloaterPay::LLFloaterPay(const std::string& name, childSetKeystrokeCallback("amount", &LLFloaterPay::onKeystroke, this); childSetText("amount", last_amount); - childSetPrevalidate("desc", LLLineEditor::prevalidatePositiveS32); + childSetPrevalidate("amount", LLLineEditor::prevalidatePositiveS32); info = new LLGiveMoneyInfo(this, 0); mCallbackData.push_back(info); @@ -344,7 +344,7 @@ void LLFloaterPay::payDirectly(money_callback callback, { LLFloaterPay *floater = new LLFloaterPay("Give Money", callback, target_id, FALSE); if (!floater) return; - + floater->childSetVisible("amount", TRUE); floater->childSetVisible("pay btn", TRUE); floater->childSetVisible("amount text", TRUE); diff --git a/linden/indra/newview/llhudeffect.cpp b/linden/indra/newview/llhudeffect.cpp index 6343dc3..090895e 100644 --- a/linden/indra/newview/llhudeffect.cpp +++ b/linden/indra/newview/llhudeffect.cpp @@ -57,6 +57,7 @@ LLHUDEffect::~LLHUDEffect() void LLHUDEffect::packData(LLMessageSystem *mesgsys) { mesgsys->addUUIDFast(_PREHASH_ID, mID); + mesgsys->addUUIDFast(_PREHASH_AgentID, gAgent.getID()); mesgsys->addU8Fast(_PREHASH_Type, mType); mesgsys->addF32Fast(_PREHASH_Duration, mDuration); mesgsys->addBinaryData(_PREHASH_Color, mColor.mV, 4); diff --git a/linden/indra/newview/llhudmanager.cpp b/linden/indra/newview/llhudmanager.cpp index 2afdac0..bb1c2da 100644 --- a/linden/indra/newview/llhudmanager.cpp +++ b/linden/indra/newview/llhudmanager.cpp @@ -195,9 +195,13 @@ void LLHUDManager::sendEffects() } if (hep->getNeedsSendToSim() && hep->getOriginatedHere()) { - gMessageSystem->newMessageFast(_PREHASH_ViewerEffect); - gMessageSystem->nextBlockFast(_PREHASH_Effect); - hep->packData(gMessageSystem); + LLMessageSystem* msg = gMessageSystem; + msg->newMessageFast(_PREHASH_ViewerEffect); + msg->nextBlockFast(_PREHASH_AgentData); + msg->addUUIDFast(_PREHASH_AgentID, gAgent.getID()); + msg->addUUIDFast(_PREHASH_SessionID, gAgent.getSessionID()); + msg->nextBlockFast(_PREHASH_Effect); + hep->packData(msg); hep->setNeedsSendToSim(FALSE); gAgent.sendMessage(); } diff --git a/linden/indra/newview/llpanelavatar.cpp b/linden/indra/newview/llpanelavatar.cpp index 8ba33a9..c7019e0 100644 --- a/linden/indra/newview/llpanelavatar.cpp +++ b/linden/indra/newview/llpanelavatar.cpp @@ -419,8 +419,11 @@ BOOL LLPanelAvatarSecondLife::postBuild(void) childSetVisible("allow_publish",LLPanelAvatar::sAllowFirstLife); childSetVisible("?",LLPanelAvatar::sAllowFirstLife); - childSetVisible("online_unknown",TRUE); childSetVisible("online_yes",FALSE); + + // These are cruft but may still exist in some xml files + // TODO: remove the following 2 lines once translators grab these changes + childSetVisible("online_unknown",FALSE); childSetVisible("online_no",FALSE); childSetAction("Show on Map", LLPanelAvatar::onClickTrack, mPanelAvatar); @@ -1298,6 +1301,19 @@ void LLPanelAvatar::setAvatar(LLViewerObject *avatarp) setAvatarID(avatarp->getID(), name, ONLINE_STATUS_YES); } +void LLPanelAvatar::setOnlineStatus(EOnlineStatus online_status) +{ + // Online status NO could be because they are hidden + // If they are a friend, we may know the truth! + if ((ONLINE_STATUS_YES != online_status) + && mIsFriend + && (LLAvatarTracker::instance().isBuddyOnline( mAvatarID ))) + { + online_status = ONLINE_STATUS_YES; + } + + mPanelSecondLife->childSetVisible("online_yes", (online_status == ONLINE_STATUS_YES)); +} void LLPanelAvatar::setAvatarID(const LLUUID &avatar_id, const LLString &name, EOnlineStatus online_status) @@ -1314,50 +1330,8 @@ void LLPanelAvatar::setAvatarID(const LLUUID &avatar_id, const LLString &name, // Determine if we have their calling card. mIsFriend = is_agent_friend(mAvatarID); - if (ONLINE_STATUS_UNKNOWN == online_status) - { - // Determine if we know that they are online. If we can see them, - // we know they're online. Likewise, if we have a calling card, - // we know. Otherwise we don't. - LLViewerObject* object = gObjectList.findObject( mAvatarID ); - if (object && !object->isDead()) - { - online_status = ONLINE_STATUS_YES; - } - else if (mIsFriend) - { - if (LLAvatarTracker::instance().isBuddyOnline( mAvatarID )) - { - online_status = ONLINE_STATUS_YES; - } - else - { - online_status = ONLINE_STATUS_NO; - } - } - else - { - // Don't actually know if they are online. - } - } - - mPanelSecondLife->childSetVisible("online_unknown",FALSE); - mPanelSecondLife->childSetVisible("online_yes",FALSE); - mPanelSecondLife->childSetVisible("online_no",FALSE); - - switch(online_status) - { - case ONLINE_STATUS_YES: - mPanelSecondLife->childSetVisible("online_yes",TRUE); - break; - case ONLINE_STATUS_NO: - mPanelSecondLife->childSetVisible("online_no",TRUE); - break; - case ONLINE_STATUS_UNKNOWN: - default: - mPanelSecondLife->childSetVisible("online_unknown",TRUE); - break; - } + // setOnlineStatus uses mIsFriend + setOnlineStatus(online_status); BOOL own_avatar = (mAvatarID == gAgent.getID() ); @@ -1755,8 +1729,11 @@ void LLPanelAvatar::processAvatarPropertiesReply(LLMessageSystem *msg, void**) //BOOL mature = FALSE; BOOL identified = FALSE; BOOL transacted = FALSE; + BOOL online = FALSE; char profile_url[DB_USER_PROFILE_URL_BUF_SIZE]; + U32 flags = 0x0; + //llinfos << "properties packet size " << msg->getReceiveSize() << llendl; msg->getUUIDFast(_PREHASH_AgentData, _PREHASH_AgentID, agent_id); @@ -1776,7 +1753,6 @@ void LLPanelAvatar::processAvatarPropertiesReply(LLMessageSystem *msg, void**) { self->childSetEnabled("Rate...",TRUE); } - lldebugs << "!!!!!!!!!!!!!!!!!!!!!!Enabling drop target" << llendl; self->childSetEnabled("drop target",TRUE); self->mHaveProperties = TRUE; @@ -1788,9 +1764,17 @@ void LLPanelAvatar::processAvatarPropertiesReply(LLMessageSystem *msg, void**) msg->getStringFast(_PREHASH_PropertiesData, _PREHASH_AboutText, DB_USER_ABOUT_BUF_SIZE, about_text ); msg->getStringFast(_PREHASH_PropertiesData, _PREHASH_FLAboutText, DB_USER_FL_ABOUT_BUF_SIZE, fl_about_text ); msg->getStringFast(_PREHASH_PropertiesData, _PREHASH_BornOn, DB_BORN_BUF_SIZE, born_on); - msg->getBOOLFast(_PREHASH_PropertiesData, _PREHASH_Identified, identified); - msg->getBOOLFast(_PREHASH_PropertiesData, _PREHASH_Transacted, transacted); msg->getString("PropertiesData","ProfileURL", DB_USER_PROFILE_URL_BUF_SIZE, profile_url); + msg->getU32Fast(_PREHASH_PropertiesData, _PREHASH_Flags, flags); + + identified = (flags & AVATAR_IDENTIFIED); + transacted = (flags & AVATAR_TRANSACTED); + allow_publish = (flags & AVATAR_ALLOW_PUBLISH); + online = (flags & AVATAR_ONLINE); + + EOnlineStatus online_status = (online) ? ONLINE_STATUS_YES : ONLINE_STATUS_NO; + + self->setOnlineStatus(online_status); self->mPanelWeb->setWebURL(std::string(profile_url)); U8 caption_index = 0; @@ -1868,7 +1852,6 @@ void LLPanelAvatar::processAvatarPropertiesReply(LLMessageSystem *msg, void**) { image_ctrl->setImageAssetID(fl_image_id); } - msg->getBOOL("PropertiesData", "AllowPublish", allow_publish); self->mPanelSecondLife->childSetValue("allow_publish", allow_publish); diff --git a/linden/indra/newview/llpanelavatar.h b/linden/indra/newview/llpanelavatar.h index ab08ffb..81cfe02 100644 --- a/linden/indra/newview/llpanelavatar.h +++ b/linden/indra/newview/llpanelavatar.h @@ -55,7 +55,6 @@ class LLWebBrowserCtrl; enum EOnlineStatus { - ONLINE_STATUS_UNKNOWN = -1, ONLINE_STATUS_NO = 0, ONLINE_STATUS_YES = 1 }; @@ -262,6 +261,8 @@ public: // Pass one of the ONLINE_STATUS_foo constants above. void setAvatarID(const LLUUID &avatar_id, const LLString &name, EOnlineStatus online_status); + void setOnlineStatus(EOnlineStatus online_status); + const LLUUID& getAvatarID() const { return mAvatarID; } void disableRate(); diff --git a/linden/indra/newview/llpaneldirbrowser.cpp b/linden/indra/newview/llpaneldirbrowser.cpp index a7a3895..f701bf4 100644 --- a/linden/indra/newview/llpaneldirbrowser.cpp +++ b/linden/indra/newview/llpaneldirbrowser.cpp @@ -316,14 +316,8 @@ void LLPanelDirBrowser::onCommitList(LLUICtrl* ctrl, void* data) switch(type) { + // These are both people searches. Let the panel decide if they are online or offline. case ONLINE_CODE: - if (self->mFloaterDirectory && self->mFloaterDirectory->mPanelAvatarp) - { - self->mFloaterDirectory->mPanelAvatarp->setVisible(TRUE); - self->mFloaterDirectory->mPanelAvatarp->setAvatarID(id, name, ONLINE_STATUS_YES); - self->mFloaterDirectory->mPanelAvatarp->disableRate(); - } - break; case OFFLINE_CODE: if (self->mFloaterDirectory && self->mFloaterDirectory->mPanelAvatarp) { @@ -409,7 +403,6 @@ void LLPanelDirBrowser::processDirPeopleReply(LLMessageSystem *msg, void**) char first_name[DB_FIRST_NAME_BUF_SIZE]; char last_name[DB_LAST_NAME_BUF_SIZE]; LLUUID agent_id; - U8 online; msg->getUUIDFast(_PREHASH_QueryData,_PREHASH_QueryID, query_id); @@ -445,7 +438,7 @@ void LLPanelDirBrowser::processDirPeopleReply(LLMessageSystem *msg, void**) msg->getStringFast(_PREHASH_QueryReplies,_PREHASH_FirstName, DB_FIRST_NAME_BUF_SIZE, first_name, i); msg->getStringFast(_PREHASH_QueryReplies,_PREHASH_LastName, DB_LAST_NAME_BUF_SIZE, last_name, i); msg->getUUIDFast( _PREHASH_QueryReplies,_PREHASH_AgentID, agent_id, i); - msg->getU8Fast( _PREHASH_QueryReplies,_PREHASH_Online, online, i); + // msg->getU8Fast( _PREHASH_QueryReplies,_PREHASH_Online, online, i); // unused // msg->getStringFast(_PREHASH_QueryReplies,_PREHASH_Group, DB_GROUP_NAME_BUF_SIZE, group, i); // msg->getS32Fast( _PREHASH_QueryReplies,_PREHASH_Reputation, reputation, i); @@ -461,24 +454,14 @@ void LLPanelDirBrowser::processDirPeopleReply(LLMessageSystem *msg, void**) row["id"] = agent_id; LLUUID image_id; - if (online) - { - image_id.set( gViewerArt.getString("icon_avatar_online.tga") ); - row["columns"][0]["column"] = "icon"; - row["columns"][0]["type"] = "icon"; - row["columns"][0]["value"] = image_id; - - content["type"] = ONLINE_CODE; - } - else - { - image_id.set( gViewerArt.getString("icon_avatar_offline.tga") ); - row["columns"][0]["column"] = "icon"; - row["columns"][0]["type"] = "icon"; - row["columns"][0]["value"] = image_id; + // We don't show online status in the finder anymore, + // so just use the 'offline' icon as the generic 'person' icon + image_id.set( gViewerArt.getString("icon_avatar_offline.tga") ); + row["columns"][0]["column"] = "icon"; + row["columns"][0]["type"] = "icon"; + row["columns"][0]["value"] = image_id; - content["type"] = OFFLINE_CODE; - } + content["type"] = OFFLINE_CODE; LLString fullname = LLString(first_name) + " " + LLString(last_name); row["columns"][1]["column"] = "name"; @@ -487,19 +470,6 @@ void LLPanelDirBrowser::processDirPeopleReply(LLMessageSystem *msg, void**) content["name"] = fullname; - if (online) - { - row["columns"][2]["column"] = "online"; - row["columns"][2]["value"] = "yes"; - row["columns"][2]["font"] = "SANSSERIFSMALL"; - } - else - { - row["columns"][2]["column"] = "online"; - row["columns"][2]["value"] = "no"; - row["columns"][2]["font"] = "SANSSERIFSMALL"; - } - list->addElement(row); LLString id_str = agent_id.getString(); diff --git a/linden/indra/newview/llpaneldirpeople.cpp b/linden/indra/newview/llpaneldirpeople.cpp index 87b3582..1fe1570 100644 --- a/linden/indra/newview/llpaneldirpeople.cpp +++ b/linden/indra/newview/llpaneldirpeople.cpp @@ -71,11 +71,6 @@ void LLPanelDirPeople::performQuery() setupNewSearch(); U32 scope = DFQ_PEOPLE; - if (childGetValue("online check").asBoolean()) - { - llinfos << "Online only people search." << llendl; - scope |= DFQ_ONLINE; - } // send the message sendDirFindQuery( diff --git a/linden/indra/newview/llprefsim.cpp b/linden/indra/newview/llprefsim.cpp index 12ca0b1..383fe76 100644 --- a/linden/indra/newview/llprefsim.cpp +++ b/linden/indra/newview/llprefsim.cpp @@ -34,7 +34,7 @@ #include "llcheckboxctrl.h" #include "llstring.h" #include "lltexteditor.h" - +#include "llavatarconstants.h" #include "llagent.h" #include "llviewercontrol.h" #include "llviewernetwork.h" @@ -42,9 +42,6 @@ #include "lldirpicker.h" -static const std::string VISIBILITY_DEFAULT("default"); -static const std::string VISIBILITY_HIDDEN("hidden"); - class LLPrefsIMImpl : public LLPanel { public: @@ -77,7 +74,7 @@ protected: bool mOriginalIMViaEmail; // online status info - bool mOriginalShowOnline; + bool mOriginalHideOnlineStatus; std::string mDirectoryVisibility; }; @@ -112,7 +109,7 @@ void LLPrefsIMImpl::cancel() BOOL LLPrefsIMImpl::postBuild() { - requires("directory_visibility"); + requires("online_visibility"); requires("send_im_to_email"); if (!checkRequirements()) { @@ -121,11 +118,11 @@ BOOL LLPrefsIMImpl::postBuild() mGotPersonalInfo = false; mOriginalIMViaEmail = false; - mOriginalShowOnline = false; + mOriginalHideOnlineStatus = true; childSetLabelArg("send_im_to_email", "[EMAIL]", childGetText("log_in_to_change")); // Don't enable this until we get personal data - childDisable("directory_visibility"); + childDisable("online_visibility"); childDisable("send_im_to_email"); childDisable("log_instant_messages"); childDisable("log_chat"); @@ -189,10 +186,10 @@ void LLPrefsIMImpl::apply() LLFile::mkdir(gDirUtilp->getPerAccountChatLogsDir().c_str()); bool new_im_via_email = childGetValue("send_im_to_email").asBoolean(); - bool new_show_online = childGetValue("directory_visibility").asBoolean(); + bool new_hide_online = childGetValue("online_visibility").asBoolean(); if((new_im_via_email != mOriginalIMViaEmail) - ||(new_show_online != mOriginalShowOnline)) + ||(new_hide_online != mOriginalHideOnlineStatus)) { LLMessageSystem* msg = gMessageSystem; msg->newMessageFast(_PREHASH_UpdateUserInfo); @@ -206,12 +203,12 @@ void LLPrefsIMImpl::apply() // can only select between 2 values, we represent it as a // checkbox. This breaks down a little bit for liaisons, but // works out in the end. - if(new_show_online != mOriginalShowOnline) + if(new_hide_online != mOriginalHideOnlineStatus) { - if(new_show_online) mDirectoryVisibility = VISIBILITY_DEFAULT; - else mDirectoryVisibility = VISIBILITY_HIDDEN; + if(new_hide_online) mDirectoryVisibility = VISIBILITY_HIDDEN; + else mDirectoryVisibility = VISIBILITY_DEFAULT; //Update showonline value, otherwise multiple applys won't work - mOriginalShowOnline = new_show_online; + mOriginalHideOnlineStatus = new_hide_online; } msg->addString("DirectoryVisibility", mDirectoryVisibility); gAgent.sendReliableMessage(); @@ -229,20 +226,20 @@ void LLPrefsIMImpl::setPersonalInfo( mDirectoryVisibility = visibility; if(visibility == VISIBILITY_DEFAULT) { - mOriginalShowOnline = true; - childEnable("directory_visibility"); + mOriginalHideOnlineStatus = false; + childEnable("online_visibility"); } else if(visibility == VISIBILITY_HIDDEN) { - mOriginalShowOnline = false; - childEnable("directory_visibility"); + mOriginalHideOnlineStatus = true; + childEnable("online_visibility"); } else { - mOriginalShowOnline = false; + mOriginalHideOnlineStatus = true; } - childSetValue("directory_visibility", mOriginalShowOnline); - childSetLabelArg("directory_visibility", "[DIR_VIS]", mDirectoryVisibility); + childSetValue("online_visibility", mOriginalHideOnlineStatus); + childSetLabelArg("online_visibility", "[DIR_VIS]", mDirectoryVisibility); childEnable("send_im_to_email"); childSetValue("send_im_to_email", im_via_email); childEnable("log_instant_messages"); diff --git a/linden/indra/newview/llviewermenu.cpp b/linden/indra/newview/llviewermenu.cpp index 3e5063e..ab400de 100644 --- a/linden/indra/newview/llviewermenu.cpp +++ b/linden/indra/newview/llviewermenu.cpp @@ -581,21 +581,21 @@ void init_menus() // flash when an item is triggered (the flash occurs in the holder) gViewerWindow->getRootView()->addChild(gMenuHolder); - gMenuHolder->childSetLabelArg("Upload Image", "[COST]", "10"); - gMenuHolder->childSetLabelArg("Upload Sound", "[COST]", "10"); - gMenuHolder->childSetLabelArg("Upload Animation", "[COST]", "10"); - gMenuHolder->childSetLabelArg("Bulk Upload", "[COST]", "10"); + gMenuHolder->childSetLabelArg("Upload Image", "[COST]", "10"); + gMenuHolder->childSetLabelArg("Upload Sound", "[COST]", "10"); + gMenuHolder->childSetLabelArg("Upload Animation", "[COST]", "10"); + gMenuHolder->childSetLabelArg("Bulk Upload", "[COST]", "10"); - gAFKMenu = (LLMenuItemCallGL*)gMenuBarView->getChildByName("Set Away", TRUE); - gBusyMenu = (LLMenuItemCallGL*)gMenuBarView->getChildByName("Set Busy", TRUE); - gAttachSubMenu = gMenuBarView->getChildMenuByName("Attach Object", TRUE); - gDetachSubMenu = gMenuBarView->getChildMenuByName("Detach Object", TRUE); + gAFKMenu = (LLMenuItemCallGL*)gMenuBarView->getChildByName("Set Away", TRUE); + gBusyMenu = (LLMenuItemCallGL*)gMenuBarView->getChildByName("Set Busy", TRUE); + gAttachSubMenu = gMenuBarView->getChildMenuByName("Attach Object", TRUE); + gDetachSubMenu = gMenuBarView->getChildMenuByName("Detach Object", TRUE); - if (gAgent.mAccess < SIM_ACCESS_MATURE) - { - gMenuBarView->getChildByName("Menu Underpants", TRUE)->setVisible(FALSE); - gMenuBarView->getChildByName("Menu Undershirt", TRUE)->setVisible(FALSE); - } + if (gAgent.mAccess < SIM_ACCESS_MATURE) + { + gMenuBarView->getChildByName("Menu Underpants", TRUE)->setVisible(FALSE); + gMenuBarView->getChildByName("Menu Undershirt", TRUE)->setVisible(FALSE); + } // TomY TODO convert these two LLMenuGL*menu; @@ -626,23 +626,23 @@ void init_menus() /// gPieSelf = gUICtrlFactory->buildPieMenu("menu_pie_self.xml", gMenuHolder); - // TomY TODO: what shall we do about these? - gDetachScreenPieMenu = (LLPieMenu*)gMenuHolder->getChildByName("Object Detach HUD", true); - gDetachPieMenu = (LLPieMenu*)gMenuHolder->getChildByName("Object Detach", true); + // TomY TODO: what shall we do about these? + gDetachScreenPieMenu = (LLPieMenu*)gMenuHolder->getChildByName("Object Detach HUD", true); + gDetachPieMenu = (LLPieMenu*)gMenuHolder->getChildByName("Object Detach", true); - if (gAgent.mAccess < SIM_ACCESS_MATURE) - { - gMenuHolder->getChildByName("Self Underpants", TRUE)->setVisible(FALSE); - gMenuHolder->getChildByName("Self Undershirt", TRUE)->setVisible(FALSE); - } + if (gAgent.mAccess < SIM_ACCESS_MATURE) + { + gMenuHolder->getChildByName("Self Underpants", TRUE)->setVisible(FALSE); + gMenuHolder->getChildByName("Self Undershirt", TRUE)->setVisible(FALSE); + } gPieAvatar = gUICtrlFactory->buildPieMenu("menu_pie_avatar.xml", gMenuHolder); gPieObject = gUICtrlFactory->buildPieMenu("menu_pie_object.xml", gMenuHolder); - gAttachScreenPieMenu = (LLPieMenu*)gMenuHolder->getChildByName("Object Attach HUD", true); - gAttachPieMenu = (LLPieMenu*)gMenuHolder->getChildByName("Object Attach", true); - gPieRate = (LLPieMenu*)gMenuHolder->getChildByName("Rate Menu", true); + gAttachScreenPieMenu = (LLPieMenu*)gMenuHolder->getChildByName("Object Attach HUD", true); + gAttachPieMenu = (LLPieMenu*)gMenuHolder->getChildByName("Object Attach", true); + gPieRate = (LLPieMenu*)gMenuHolder->getChildByName("Rate Menu", true); gPieAttachment = gUICtrlFactory->buildPieMenu("menu_pie_attachment.xml", gMenuHolder); diff --git a/linden/indra/newview/llviewermessage.cpp b/linden/indra/newview/llviewermessage.cpp index 124ae13..1b91f9d 100644 --- a/linden/indra/newview/llviewermessage.cpp +++ b/linden/indra/newview/llviewermessage.cpp @@ -3906,7 +3906,7 @@ void process_alert_core(const char* buffer, BOOL modal) { //XUI:translate LLString::format_map_t args; - args["[BUFFER]"] = buffer; + args["[ERROR_MESSAGE]"] = buffer; gViewerWindow->alertXml("ErrorMessage", args); } else diff --git a/linden/indra/newview/releasenotes.txt b/linden/indra/newview/releasenotes.txt index 4cce794..01f16b3 100644 --- a/linden/indra/newview/releasenotes.txt +++ b/linden/indra/newview/releasenotes.txt @@ -1,3 +1,15 @@ +Release Notes for Second Life 1.13.3(2) January 30, 2007 +===================================== +Changes: +* It is no longer possible to only search for online residents +* Online status is no longer indicated in the Search -> People results list +** The online status inside the profile shows 'Currently Online' or remains blank +*** Friends can see your Online status if you give permission via the Friends list +*** Anyone can see your Online status if 'Make my online status visible only to my Friends' is unchecked + +Bug fixes: +* Fixed script email across simulators + Release Notes for Second Life 1.13.2(15) January 25, 2007 ===================================== Changes: diff --git a/linden/indra/newview/res/newViewRes.rc b/linden/indra/newview/res/newViewRes.rc index cf7b935..41c2af1 100644 --- a/linden/indra/newview/res/newViewRes.rc +++ b/linden/indra/newview/res/newViewRes.rc @@ -227,8 +227,8 @@ TOOLPIPETTE CURSOR "toolpipette.cur" // VS_VERSION_INFO VERSIONINFO - FILEVERSION 1,13,2,15 - PRODUCTVERSION 1,13,2,0 + FILEVERSION 1,13,3,2 + PRODUCTVERSION 1,13,3,2 FILEFLAGSMASK 0x3fL #ifdef _DEBUG FILEFLAGS 0x1L @@ -245,12 +245,12 @@ BEGIN BEGIN VALUE "CompanyName", "Linden Lab" VALUE "FileDescription", "Second Life" - VALUE "FileVersion", "1.13.2.15" + VALUE "FileVersion", "1.13.3.57442" VALUE "InternalName", "Second Life" VALUE "LegalCopyright", "Copyright © 2001-2006, Linden Research, Inc." VALUE "OriginalFilename", "SecondLife.exe" VALUE "ProductName", "Second Life" - VALUE "ProductVersion", "1.13.2.0" + VALUE "ProductVersion", "1.13.3.57442" END END BLOCK "VarFileInfo" diff --git a/linden/indra/newview/skins/xui/en-us/floater_directory.xml b/linden/indra/newview/skins/xui/en-us/floater_directory.xml index 8056aa9..8184fdb 100644 --- a/linden/indra/newview/skins/xui/en-us/floater_directory.xml +++ b/linden/indra/newview/skins/xui/en-us/floater_directory.xml @@ -464,12 +464,9 @@ To buy direct, visit the land and click on the place name in the title bar. - + max_length="63" mouse_opaque="true" name="name" width="200" />