diff --git a/indra/cmake/00-Common.cmake b/indra/cmake/00-Common.cmake index a940163e7..cc6f145aa 100644 --- a/indra/cmake/00-Common.cmake +++ b/indra/cmake/00-Common.cmake @@ -53,10 +53,8 @@ if (WINDOWS) # Remove default /Zm1000 flag that cmake inserts string (REPLACE "/Zm1000" " " CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}") - if (MSVC12) - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /Zm140") - endif (MSVC12) - + # Always use /Zm140 + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /Zm140") # Don't build DLLs. set(BUILD_SHARED_LIBS OFF) diff --git a/indra/develop.py b/indra/develop.py index 240e1b51a..b712f5a7b 100755 --- a/indra/develop.py +++ b/indra/develop.py @@ -169,7 +169,7 @@ class PlatformSetup(object): raise def parse_build_opts(self, arguments): - opts, targets = getopt.getopt(arguments, 'o:', ['option=']) + opts, targets = getopt.getopt(arguments, 'D:o:', ['option=']) build_opts = [] for o, a in opts: if o in ('-o', '--option'): @@ -612,15 +612,15 @@ class WindowsSetup(PlatformSetup): if environment == '': environment = self.find_visual_studio_express() if environment == '': - environment = self.find_visual_studio_express_single() - if environment == '': - print >> sys.stderr, "Something went very wrong during build stage, could not find a Visual Studio?" - else: - build_dirs=self.build_dirs() - print >> sys.stderr, "\nSolution generation complete, it can can now be found in:", build_dirs[0] - print >> sys.stderr, "\nAs you are using an Express Visual Studio, the build step cannot be automated" - print >> sys.stderr, "\nPlease see https://wiki.secondlife.com/wiki/Microsoft_Visual_Studio#Extra_steps_for_Visual_Studio_Express_editions for Visual Studio Express specific information" - exit(0) + environment = self.find_visual_studio_express_single() + if environment == '': + print >> sys.stderr, "Something went very wrong during build stage, could not find a Visual Studio?" + else: + build_dirs=self.build_dirs() + print >> sys.stderr, "\nSolution generation complete, it can can now be found in:", build_dirs[0] + print >> sys.stderr, "\nAs you are using an Express Visual Studio, the build step cannot be automated" + print >> sys.stderr, "\nPlease see https://wiki.secondlife.com/wiki/Microsoft_Visual_Studio#Extra_steps_for_Visual_Studio_Express_editions for Visual Studio Express specific information" + exit(0) # devenv.com is CLI friendly, devenv.exe... not so much. return ('"%sdevenv.com" %s.sln /build %s' % @@ -662,7 +662,7 @@ class WindowsSetup(PlatformSetup): os.path.join(build_dir,'Singularity.sln') + ' --config ' + self.build_type + ' --startup secondlife-bin') - print 'Running %r in %r' % (vstool_cmd, getcwd()) + print 'Running vstool %r in %r' % (vstool_cmd, getcwd()) self.run(vstool_cmd) print >> open(stamp, 'w'), self.build_type @@ -676,11 +676,11 @@ class WindowsSetup(PlatformSetup): if targets: for t in targets: cmd = '%s /project %s %s' % (build_cmd, t, ' '.join(opts)) - print 'Running %r in %r' % (cmd, d) + print 'Running build(targets) %r in %r' % (cmd, d) self.run(cmd) else: cmd = '%s %s' % (build_cmd, ' '.join(opts)) - print 'Running %r in %r' % (cmd, d) + print 'Running build %r in %r' % (cmd, d) self.run(cmd) finally: os.chdir(cwd) diff --git a/indra/lib/python/indra/util/llmanifest.py b/indra/lib/python/indra/util/llmanifest.py index 1522e3e9a..625d1456f 100644 --- a/indra/lib/python/indra/util/llmanifest.py +++ b/indra/lib/python/indra/util/llmanifest.py @@ -39,6 +39,7 @@ import shutil import sys import tarfile import errno +import subprocess def path_ancestors(path): drive, path = os.path.splitdrive(os.path.normpath(path)) @@ -393,20 +394,19 @@ class LLManifest(object): debugging/informational purpoases, prints out the command's output as it is received.""" print "Running command:", command - fd = os.popen(command, 'r') + fd = subprocess.Popen(command, stdout=subprocess.PIPE, stderr=subprocess.PIPE, shell=True) lines = [] while True: - lines.append(fd.readline()) + lines.append(fd.stdout.readline()) if lines[-1] == '': break else: - print lines[-1], + print lines[-1].rstrip('\n'), output = ''.join(lines) - status = fd.close() - if status: + if fd.returncode: raise RuntimeError( "Command %s returned non-zero status (%s) \noutput:\n%s" - % (command, status, output) ) + % (command, fd.returncode, output) ) return output def created_path(self, path): diff --git a/indra/llcommon/CMakeLists.txt b/indra/llcommon/CMakeLists.txt index 8bc8553e3..79674c5a0 100644 --- a/indra/llcommon/CMakeLists.txt +++ b/indra/llcommon/CMakeLists.txt @@ -270,6 +270,9 @@ list(APPEND llcommon_SOURCE_FILES ${cwdebug_SOURCE_FILES}) list(APPEND llcommon_SOURCE_FILES ${llcommon_HEADER_FILES}) add_library (llcommon SHARED ${llcommon_SOURCE_FILES}) +if(WINDOWS) +set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} /GL") +endif(WINDOWS) add_dependencies(llcommon prepare) target_link_libraries( llcommon diff --git a/indra/llcommon/llregistry.h b/indra/llcommon/llregistry.h index ca6d76a98..bb0d60247 100644 --- a/indra/llcommon/llregistry.h +++ b/indra/llcommon/llregistry.h @@ -307,8 +307,10 @@ public: virtual ~StaticRegistrar() {} StaticRegistrar(ref_const_key_t key, ref_const_value_t value) { - if(!singleton_t::instance().mStaticScope) - mStaticScope = new ScopedRegistrar(); + if (singleton_t::instance().exists(key)) + { + llerrs << "Duplicate registry entry under key \"" << key << "\"" << llendl; + } singleton_t::instance().mStaticScope->add(key, value); } }; @@ -338,7 +340,7 @@ protected: virtual void initSingleton() { - //mStaticScope = new ScopedRegistrar(); + mStaticScope = new ScopedRegistrar(); } virtual ~LLRegistrySingleton() diff --git a/indra/llcommon/llsingleton.cpp b/indra/llcommon/llsingleton.cpp index eb8e2c945..3d32d4771 100644 --- a/indra/llcommon/llsingleton.cpp +++ b/indra/llcommon/llsingleton.cpp @@ -28,5 +28,5 @@ #include "llsingleton.h" -std::map * LLSingletonRegistry::sSingletonMap = NULL; +std::map* LLSingletonRegistry::sSingletonMap = NULL; diff --git a/indra/llcommon/llsingleton.h b/indra/llcommon/llsingleton.h index a780a6a24..b1e17fc13 100644 --- a/indra/llcommon/llsingleton.h +++ b/indra/llcommon/llsingleton.h @@ -33,34 +33,25 @@ /// @brief A global registry of all singletons to prevent duplicate allocations /// across shared library boundaries -class LL_COMMON_API LLSingletonRegistry { - private: - typedef std::map TypeMap; - static TypeMap * sSingletonMap; +class LL_COMMON_API LLSingletonRegistry +{ + typedef std::map TypeMap; + static TypeMap* sSingletonMap; - static void checkInit() - { - if(sSingletonMap == NULL) - { - sSingletonMap = new TypeMap(); - } - } +public: + template static void * & get() + { + std::string name(typeid(T).name()); + if (!sSingletonMap) sSingletonMap = new TypeMap(); - public: - template static void * & get() - { - std::string name(typeid(T).name()); + // the first entry of the pair returned by insert will be either the existing + // iterator matching our key, or the newly inserted NULL initialized entry + // see "Insert element" in http://www.sgi.com/tech/stl/UniqueAssociativeContainer.html + TypeMap::iterator result = + sSingletonMap->insert(std::make_pair(name, (void*)NULL)).first; - checkInit(); - - // the first entry of the pair returned by insert will be either the existing - // iterator matching our key, or the newly inserted NULL initialized entry - // see "Insert element" in http://www.sgi.com/tech/stl/UniqueAssociativeContainer.html - TypeMap::iterator result = - sSingletonMap->insert(std::make_pair(name, (void*)NULL)).first; - - return result->second; - } + return result->second; + } }; // LLSingleton implements the getInstance() method part of the Singleton @@ -90,7 +81,7 @@ class LL_COMMON_API LLSingletonRegistry { template class LLSingleton : private boost::noncopyable { - + private: typedef enum e_init_state { @@ -100,34 +91,46 @@ private: INITIALIZED, DELETED } EInitState; - - // stores pointer to singleton instance - // and tracks initialization state of singleton - struct SingletonInstanceData - { - EInitState mInitState; - DERIVED_TYPE* mSingletonInstance; - - SingletonInstanceData() - : mSingletonInstance(NULL), - mInitState(UNINITIALIZED) - {} - ~SingletonInstanceData() + static DERIVED_TYPE* constructSingleton() + { + return new DERIVED_TYPE(); + } + + struct SingletonData; + + // stores pointer to singleton instance + struct SingletonLifetimeManager + { + SingletonLifetimeManager() { - if (mInitState != DELETED) + construct(); + } + + static void construct() + { + SingletonData& sData(getData()); + sData.mInitState = CONSTRUCTING; + sData.mInstance = constructSingleton(); + sData.mInitState = INITIALIZING; + } + + ~SingletonLifetimeManager() + { + SingletonData& sData(getData()); + if (sData.mInitState != DELETED) { deleteSingleton(); } } }; - + public: virtual ~LLSingleton() { - SingletonInstanceData& data = getData(); - data.mSingletonInstance = NULL; - data.mInitState = DELETED; + SingletonData& sData(getData()); + sData.mInstance = NULL; + sData.mInitState = DELETED; } /** @@ -152,37 +155,66 @@ public: */ static void deleteSingleton() { - DERIVED_TYPE* instance = getData().mSingletonInstance; - getData().mInitState = DELETED; - getData().mSingletonInstance = NULL; - delete instance; + SingletonData& sData(getData()); + delete sData.mInstance; + sData.mInstance = NULL; + sData.mInitState = DELETED; } - static SingletonInstanceData& getData() + static SingletonData& getData() { // this is static to cache the lookup results static void * & registry = LLSingletonRegistry::get(); // *TODO - look into making this threadsafe - if(NULL == registry) + if (!registry) { - static SingletonInstanceData data; + static SingletonData data; registry = &data; } - return *static_cast(registry); + return *static_cast(registry); } static DERIVED_TYPE* getInstance() { - SingletonInstanceData& data = getData(); + static SingletonLifetimeManager sLifeTimeMgr; + SingletonData& sData(getData()); - if (data.mInitState != INITIALIZED) + switch (sData.mInitState) { - createInstance(data); + case UNINITIALIZED: + // should never be uninitialized at this point + llassert(false); + return NULL; + case CONSTRUCTING: + llerrs << "Tried to access singleton " << typeid(DERIVED_TYPE).name() << " from singleton constructor!" << LL_ENDL; + return NULL; + case INITIALIZING: + // go ahead and flag ourselves as initialized so we can be reentrant during initialization + sData.mInitState = INITIALIZED; + // initialize singleton after constructing it so that it can reference other singletons which in turn depend on it, + // thus breaking cyclic dependencies + sData.mInstance->initSingleton(); + return sData.mInstance; + case INITIALIZED: + return sData.mInstance; + case DELETED: + llwarns << "Trying to access deleted singleton " << typeid(DERIVED_TYPE).name() << " creating new instance" << LL_ENDL; + SingletonLifetimeManager::construct(); + // same as first time construction + sData.mInitState = INITIALIZED; + sData.mInstance->initSingleton(); + return sData.mInstance; } - return data.mSingletonInstance; + return NULL; + } + + static DERIVED_TYPE* getIfExists() + { + SingletonData& sData(getData()); + return sData.mInstance; } // Reference version of getInstance() @@ -191,51 +223,34 @@ public: { return *getInstance(); } - + // Has this singleton been created uet? // Use this to avoid accessing singletons before the can safely be constructed static bool instanceExists() { - return getData().mInitState == INITIALIZED; + SingletonData& sData(getData()); + return sData.mInitState == INITIALIZED; } - + // Has this singleton already been deleted? // Use this to avoid accessing singletons from a static object's destructor static bool destroyed() { - return getData().mInitState == DELETED; + SingletonData& sData(getData()); + return sData.mInitState == DELETED; } private: - static void createInstance(SingletonInstanceData& data); + virtual void initSingleton() {} + + struct SingletonData + { + // explicitly has a default constructor so that member variables are zero initialized in BSS + // and only changed by singleton logic, not constructor running during startup + EInitState mInitState; + DERIVED_TYPE* mInstance; + }; }; -// Moved this here cause it's too big to be inlined --Aleric. -template -void LLSingleton::createInstance(SingletonInstanceData& data) -{ - if (data.mInitState == CONSTRUCTING) - { - llerrs << "Tried to access singleton " << typeid(DERIVED_TYPE).name() << " from singleton constructor!" << llendl; - } - - if (data.mInitState == DELETED) - { - llwarns << "Trying to access deleted singleton " << typeid(DERIVED_TYPE).name() << " creating new instance" << llendl; - } - - if (data.mInitState == INITIALIZING) - { - llerrs << "Tried to access singleton " << typeid(DERIVED_TYPE).name() << " from initSingleton(), using half-initialized object" << llendl; - return; - } - - data.mInitState = CONSTRUCTING; - data.mSingletonInstance = new DERIVED_TYPE(); - data.mInitState = INITIALIZING; - data.mSingletonInstance->initSingleton(); - data.mInitState = INITIALIZED; -} - #endif diff --git a/indra/llcommon/llversionviewer.h.in b/indra/llcommon/llversionviewer.h.in index 68949cee3..76d53b926 100644 --- a/indra/llcommon/llversionviewer.h.in +++ b/indra/llcommon/llversionviewer.h.in @@ -35,7 +35,7 @@ const S32 LL_VERSION_MAJOR = 1; const S32 LL_VERSION_MINOR = 8; -const S32 LL_VERSION_PATCH = 5; +const S32 LL_VERSION_PATCH = 6; const S32 LL_VERSION_BUILD = ${vBUILD}; const char * const LL_CHANNEL = "${VIEWER_CHANNEL}"; diff --git a/indra/llmessage/aihttptimeoutpolicy.cpp b/indra/llmessage/aihttptimeoutpolicy.cpp index a37a9f916..4434ef545 100644 --- a/indra/llmessage/aihttptimeoutpolicy.cpp +++ b/indra/llmessage/aihttptimeoutpolicy.cpp @@ -905,12 +905,8 @@ AIHTTPTimeoutPolicy const* AIHTTPTimeoutPolicy::getTimeoutPolicyByName(std::stri #define P2(n, b) AIHTTPTimeoutPolicy n##_timeout(#n, b) // Policy name Policy -//P(accountingCostResponder); -P(agentStateResponder); -P(appearanceChangeMetricsResponder); P(assetUploadResponder); P(assetReportHandler); -P(asyncConsoleResponder); P(avatarPickerResponder); P(authHandler); P(avatarNameResponder); @@ -918,15 +914,11 @@ P2(baseCapabilitiesComplete, transfer_18s_connect_5s); P(blockingLLSDPost); P(blockingLLSDGet); P(blockingRawGet); -P(charactersResponder); -P(checkAgentAppearanceServiceResponder); P(classifiedStatsResponder); -P(consoleResponder); P(createInventoryCategoryResponder); P(emeraldDicDownloader); P(environmentApplyResponder); P(environmentRequestResponder); -P(estateChangeInfoResponder); P2(eventPollResponder, reply_60s); P(fetchInventoryResponder); P(fetchScriptLimitsAttachmentInfoResponder); @@ -960,12 +952,8 @@ P2(meshPhysicsShapeResponder, connect_30s); P2(meshSkinInfoResponder, connect_30s); P(mimeDiscoveryResponder); P(moderationResponder); -P(navMeshRebakeResponder); -P(navMeshResponder); -P(navMeshStatusResponder); P(newAgentInventoryVariablePriceResponder); P(objectCostResponder); -P(objectLinksetsResponder); P(physicsFlagsResponder); P(productInfoRequestResponder); P(regionResponder); @@ -977,7 +965,6 @@ P(setDisplayNameResponder); P2(simulatorFeaturesReceived, transfer_22s_connect_10s); P(startConferenceChatResponder); P2(startGroupVoteResponder, transfer_300s); -P(terrainLinksetsResponder); P(translationReceiver); P(uploadModelPremissionsResponder); P(userReportResponder); diff --git a/indra/llvfs/lldir_mac.cpp b/indra/llvfs/lldir_mac.cpp index 114dc0c47..b6ba5e308 100644 --- a/indra/llvfs/lldir_mac.cpp +++ b/indra/llvfs/lldir_mac.cpp @@ -150,7 +150,7 @@ LLDir_Mac::LLDir_Mac() CFURLRef resourcesURLRef = CFBundleCopyResourcesDirectoryURL(mainBundleRef); CFURLRefToLLString(resourcesURLRef, mAppRODataDir, true); - U32 build_dir_pos = mExecutableDir.rfind("/indra/build-darwin-"); + size_t build_dir_pos = mExecutableDir.rfind("/indra/build-darwin-"); if (build_dir_pos != std::string::npos) { // ...we're in a dev checkout diff --git a/indra/llwindow/llkeyboard.h b/indra/llwindow/llkeyboard.h index 80ac3acfc..c2def259b 100644 --- a/indra/llwindow/llkeyboard.h +++ b/indra/llwindow/llkeyboard.h @@ -28,6 +28,7 @@ #define LL_LLKEYBOARD_H #include +#include #include "string_table.h" #include "lltimer.h" @@ -40,7 +41,7 @@ enum EKeystate KEYSTATE_UP }; -typedef void (*LLKeyFunc)(EKeystate keystate); +typedef boost::function LLKeyFunc; enum EKeyboardInsertMode { diff --git a/indra/newview/CMakeLists.txt b/indra/newview/CMakeLists.txt index 244c8ed8c..108c08451 100644 --- a/indra/newview/CMakeLists.txt +++ b/indra/newview/CMakeLists.txt @@ -1883,7 +1883,7 @@ if (WINDOWS) set_target_properties(llcommon PROPERTIES - LINK_FLAGS "/debug /NODEFAULTLIB:LIBCMT" + LINK_FLAGS "/debug /NODEFAULTLIB:LIBCMT /LTCG" LINK_FLAGS_DEBUG "/NODEFAULTLIB:\"LIBCMT;LIBCMTD;MSVCRT\"" ) diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml index 8d90bea74..0ea26715c 100644 --- a/indra/newview/app_settings/settings.xml +++ b/indra/newview/app_settings/settings.xml @@ -762,7 +762,7 @@ Type Boolean Value - 1 + 0 LiruLegacyLandmarks @@ -808,6 +808,17 @@ Value 1 + LiruResizeRootWithScreen + + Comment + When false, the ui view won't resize when the screen does (floaters won't move around without user interaction, but they also might be restricted from moving everywhere). + Persist + 1 + Type + Boolean + Value + 1 + LiruLegacyScrollToEnd Comment diff --git a/indra/newview/app_settings/settings_ascent.xml b/indra/newview/app_settings/settings_ascent.xml index 8be48da2d..f37e477d6 100644 --- a/indra/newview/app_settings/settings_ascent.xml +++ b/indra/newview/app_settings/settings_ascent.xml @@ -124,6 +124,17 @@ Value 0 + AlchemyRainbowEffects + + Comment + Makes agent effects rainbows! + Persist + 1 + Type + Boolean + Value + 0 + AlchemyRegionRestartShake Comment diff --git a/indra/newview/app_settings/settings_per_account.xml b/indra/newview/app_settings/settings_per_account.xml index d5c721237..7e369cf26 100644 --- a/indra/newview/app_settings/settings_per_account.xml +++ b/indra/newview/app_settings/settings_per_account.xml @@ -216,31 +216,18 @@ - AscentInstantMessageResponseRepeat - - Comment - Whether to keep on resending the autoresponse every line they send - Persist - 1 - Type - Boolean - Value - 0 - - - AscentInstantMessageShowOnTyping - - Comment - Whether to perform the autorespond the moment they begin to type instead of waiting for an actual message - Persist - 1 - Type - Boolean - Value - 0 - - + AscentInstantMessageResponseRepeat + + Comment + Whether to keep on resending the autoresponse every line they send + Persist + 1 + Type + Boolean + Value + 0 + AutoresponseAnyone Comment @@ -438,7 +425,7 @@ Boolean Value 0 - + BusyModeResponseItemID Comment diff --git a/indra/newview/hbfloatergrouptitles.cpp b/indra/newview/hbfloatergrouptitles.cpp index c96189de1..5efb69118 100644 --- a/indra/newview/hbfloatergrouptitles.cpp +++ b/indra/newview/hbfloatergrouptitles.cpp @@ -162,7 +162,7 @@ void HBFloaterGroupTitles::onActivate(void* userdata) void update_titles_list(HBFloaterGroupTitles* self) { S32 i; - S32 count = gAgent.mGroups.count(); + S32 count = gAgent.mGroups.size(); LLUUID id; LLUUID highlight_id = LLUUID::null; LLUUID current_group_id = gAgent.getGroupID(); @@ -178,7 +178,7 @@ void update_titles_list(HBFloaterGroupTitles* self) for (i = 0; i < count; ++i) { - group_datap = &gAgent.mGroups.get(i); + group_datap = &gAgent.mGroups[i]; id = group_datap->mID; if (self->mFirstUse) { diff --git a/indra/newview/installers/windows/installer_template.nsi b/indra/newview/installers/windows/installer_template.nsi index 8399d9f56..33549a02b 100644 --- a/indra/newview/installers/windows/installer_template.nsi +++ b/indra/newview/installers/windows/installer_template.nsi @@ -77,8 +77,8 @@ Name "${VIEWERNAME}" SubCaption 0 $(LicenseSubTitleSetup) ; override "license agreement" text BrandingText "Prepare to Implode!" ; bottom of window text -Icon %%SOURCE%%\installers\windows\${INSTALL_ICON} -UninstallIcon %%SOURCE%%\installers\windows\${UNINSTALL_ICON} +Icon "%%SOURCE%%\installers\windows\${INSTALL_ICON}" +UninstallIcon "%%SOURCE%%\installers\windows\${UNINSTALL_ICON}" WindowIcon off ; show our icon in left corner # BGGradient 9090b0 000000 notext CRCCheck on ; make sure CRC is OK diff --git a/indra/newview/lfsimfeaturehandler.cpp b/indra/newview/lfsimfeaturehandler.cpp index 2e6b55b37..e06fe5891 100644 --- a/indra/newview/lfsimfeaturehandler.cpp +++ b/indra/newview/lfsimfeaturehandler.cpp @@ -20,7 +20,6 @@ #include "lfsimfeaturehandler.h" #include "llagent.h" -#include "llenvmanager.h" #include "llviewerregion.h" #include "hippogridmanager.h" @@ -33,7 +32,7 @@ LFSimFeatureHandler::LFSimFeatureHandler() , mWhisperRange(10) { if (!gHippoGridManager->getCurrentGrid()->isSecondLife()) // Remove this line if we ever handle SecondLife sim features - LLEnvManagerNew::instance().setRegionChangeCallback(boost::bind(&LFSimFeatureHandler::handleRegionChange, this)); + gAgent.addRegionChangedCallback(boost::bind(&LFSimFeatureHandler::handleRegionChange, this)); } ExportPolicy LFSimFeatureHandler::exportPolicy() const diff --git a/indra/newview/llagent.cpp b/indra/newview/llagent.cpp index 7fb21ab0d..a8fa1568b 100644 --- a/indra/newview/llagent.cpp +++ b/indra/newview/llagent.cpp @@ -103,6 +103,7 @@ #include "lluictrlfactory.h" //For LLUICtrlFactory::getLayeredXMLNode +#include "hippolimits.h" // for getMaxAgentGroups // [RLVa:KB] - Checked: 2011-11-04 (RLVa-1.4.4a) #include "rlvactions.h" #include "rlvhandler.h" @@ -246,6 +247,7 @@ protected: private: }; + //-------------------------------------------------------------------- // Statics // @@ -272,11 +274,10 @@ void LLAgentFriendObserver::changed(U32 mask) } } -// static -void LLAgent::parcelChangedCallback() + +void LLAgent::setCanEditParcel() // called via mParcelChangedSignal { bool can_edit = LLToolMgr::getInstance()->canEdit(); - gAgent.mCanEditParcel = can_edit; } @@ -435,6 +436,8 @@ LLAgent::LLAgent() : mControlsTakenCount[i] = 0; mControlsTakenPassedOnCount[i] = 0; } + + addParcelChangedCallback(&setCanEditParcel); } // Requires gSavedSettings to be initialized. @@ -444,10 +447,10 @@ LLAgent::LLAgent() : void LLAgent::init() { + // *Note: this is where LLViewerCamera::getInstance() used to be constructed. + setFlying( gSavedSettings.getBOOL("FlyingAtExit") ); - - // LLDebugVarMessageBox::show("Camera Lag", &CAMERA_FOCUS_HALF_LIFE, 0.5f, 0.01f); *mEffectColor = gSavedSettings.getColor4("EffectColor"); @@ -458,8 +461,6 @@ void LLAgent::init() mLastKnownRequestMaturity = mLastKnownResponseMaturity; mIsDoSendMaturityPreferenceToServer = true; - LLViewerParcelMgr::getInstance()->addAgentParcelChangedCallback(boost::bind(&LLAgent::parcelChangedCallback)); - if (!mTeleportFinishedSlot.connected()) { mTeleportFinishedSlot = LLViewerParcelMgr::getInstance()->setTeleportFinishedCallback(boost::bind(&LLAgent::handleTeleportFinished, this)); @@ -706,8 +707,7 @@ BOOL LLAgent::canFly() // static const LLCachedControl ascent_fly_always_enabled("AscentFlyAlwaysEnabled",false); - if(ascent_fly_always_enabled) - return TRUE; + if(ascent_fly_always_enabled) return TRUE; // LLViewerRegion* regionp = getRegion(); @@ -759,10 +759,7 @@ void LLAgent::setFlying(BOOL fly) if (fly) { // [RLVa:KB] - Checked: 2010-03-02 (RLVa-1.2.0d) | Modified: RLVa-1.0.0c - if (gRlvHandler.hasBehaviour(RLV_BHVR_FLY)) - { - return; - } + if (gRlvHandler.hasBehaviour(RLV_BHVR_FLY)) return; // [/RLVa:KB] BOOL was_flying = getFlying(); @@ -815,6 +812,8 @@ void LLAgent::toggleFlying() bool LLAgent::enableFlying() { BOOL sitting = FALSE; + static LLCachedControl continue_flying_on_unsit(gSavedSettings, "LiruContinueFlyingOnUnsit", false); + if (!continue_flying_on_unsit) if (isAgentAvatarValid()) { sitting = gAgentAvatarp->isSitting(); @@ -858,22 +857,30 @@ void LLAgent::handleServerBakeRegionTransition(const LLUUID& region_id) } } +void LLAgent::changeParcels() +{ + LL_DEBUGS("AgentLocation") << "Calling ParcelChanged callbacks" << LL_ENDL; + // Notify anything that wants to know about parcel changes + mParcelChangedSignal(); +} + +boost::signals2::connection LLAgent::addParcelChangedCallback(parcel_changed_callback_t cb) +{ + return mParcelChangedSignal.connect(cb); +} + //----------------------------------------------------------------------------- // setRegion() //----------------------------------------------------------------------------- void LLAgent::setRegion(LLViewerRegion *regionp) { - bool teleport = true; - llassert(regionp); if (mRegionp != regionp) { - // std::string host_name; - // host_name = regionp->getHost().getHostName(); std::string ip = regionp->getHost().getString(); - llinfos << "Moving agent into region: " << regionp->getName() - << " located at " << ip << llendl; + LL_INFOS("AgentLocation") << "Moving agent into region: " << regionp->getName() + << " located at " << ip << LL_ENDL; if (mRegionp) { // NaCl - Antispam Registry @@ -905,9 +912,6 @@ void LLAgent::setRegion(LLViewerRegion *regionp) { gSky.mVOGroundp->setRegion(regionp); } - - // Notify windlight managers - teleport = (gAgent.getTeleportState() != LLAgent::TELEPORT_NONE); } else { @@ -929,6 +933,7 @@ void LLAgent::setRegion(LLViewerRegion *regionp) // Pass new region along to metrics components that care about this level of detail. LLAppViewer::metricsUpdateRegion(regionp->getHandle()); } + mRegionp = regionp; // Must shift hole-covering water object locations because local @@ -943,33 +948,18 @@ void LLAgent::setRegion(LLViewerRegion *regionp) LLSelectMgr::getInstance()->updateSelectionCenter(); - if (teleport) - { - LLEnvManagerNew::instance().onTeleport(); - } - else - { - LLEnvManagerNew::instance().onRegionCrossing(); - } - - // If the newly entered region is using server bakes, and our - // current appearance is non-baked, request appearance update from - // server. - if (mRegionp->capabilitiesReceived()) - { - handleServerBakeRegionTransition(mRegionp->getRegionID()); - } - else - { - // Need to handle via callback after caps arrive. - mRegionp->setCapabilitiesReceivedCallback(boost::bind(&LLAgent::handleServerBakeRegionTransition,this,_1)); - } + LL_DEBUGS("AgentLocation") << "Calling RegionChanged callbacks" << LL_ENDL; + mRegionChangedSignal(); } //----------------------------------------------------------------------------- // getRegion() //----------------------------------------------------------------------------- +LLViewerRegion *LLAgent::getRegion() const +{ + return mRegionp; +} const LLHost& LLAgent::getRegionHost() const { @@ -983,6 +973,16 @@ const LLHost& LLAgent::getRegionHost() const } } +boost::signals2::connection LLAgent::addRegionChangedCallback(const region_changed_signal_t::slot_type& cb) +{ + return mRegionChangedSignal.connect(cb); +} + +void LLAgent::removeRegionChangedCallback(boost::signals2::connection callback) +{ + mRegionChangedSignal.disconnect(callback); +} + //----------------------------------------------------------------------------- // inPrelude() //----------------------------------------------------------------------------- @@ -1906,12 +1906,6 @@ std::ostream& operator<<(std::ostream &s, const LLAgent &agent) return s; } - -// ------------------- Beginning of legacy LLCamera hack ---------------------- -// This section is included for legacy LLCamera support until -// it is no longer needed. Some legacy code must exist in -// non-legacy functions, and is labeled with "// legacy" comments. - // TRUE if your own avatar needs to be rendered. Usually only // in third person and build. //----------------------------------------------------------------------------- @@ -1950,8 +1944,8 @@ void LLAgent::startTyping() if (mChatTimer.getElapsedTimeF32() < 2.f) { - LLVOAvatar* chatter = gObjectList.findAvatar(mLastChatterID); - if (chatter) + LLViewerObject* chatter = gObjectList.findObject(mLastChatterID); + if (chatter && chatter->isAvatar()) { gAgentCamera.setLookAt(LOOKAT_TARGET_RESPOND, chatter, LLVector3::zero); } @@ -1961,7 +1955,8 @@ void LLAgent::startTyping() { sendAnimationRequest(ANIM_AGENT_TYPE, ANIM_REQUEST_START); } - gChatBar->sendChatFromViewer("", CHAT_TYPE_START, FALSE); + gChatBar-> + sendChatFromViewer("", CHAT_TYPE_START, FALSE); } //----------------------------------------------------------------------------- @@ -1973,7 +1968,8 @@ void LLAgent::stopTyping() { clearRenderState(AGENT_STATE_TYPING); sendAnimationRequest(ANIM_AGENT_TYPE, ANIM_REQUEST_STOP); - gChatBar->sendChatFromViewer("", CHAT_TYPE_STOP, FALSE); + gChatBar-> + sendChatFromViewer("", CHAT_TYPE_STOP, FALSE); } } @@ -2068,6 +2064,7 @@ void LLAgent::endAnimationUpdateUI() mViewsPushed = FALSE; } + gAgentCamera.setLookAt(LOOKAT_TARGET_CLEAR); if( gMorphView ) { @@ -2223,13 +2220,6 @@ void LLAgent::endAnimationUpdateUI() LLToolMgr::getInstance()->setCurrentToolset(gFaceEditToolset); LLFloaterMap::getInstance()->pushVisible(FALSE); - /* - LLView *view; - for (view = gFloaterView->getFirstChild(); view; view = gFloaterView->getNextChild()) - { - view->pushVisible(FALSE); - } - */ if( gMorphView ) { @@ -2567,28 +2557,30 @@ int LLAgent::convertTextToMaturity(char text) return LLAgentAccess::convertTextToMaturity(text); } -extern AIHTTPTimeoutPolicy maturityPreferences_timeout; class LLMaturityPreferencesResponder : public LLHTTPClient::ResponderWithResult { + LOG_CLASS(LLMaturityPreferencesResponder); public: LLMaturityPreferencesResponder(LLAgent *pAgent, U8 pPreferredMaturity, U8 pPreviousMaturity); virtual ~LLMaturityPreferencesResponder(); - /*virtual*/ void httpSuccess(void); - /*virtual*/ void httpFailure(void); +protected: + virtual void httpSuccess(); + virtual void httpFailure(); - /*virtual*/ AIHTTPTimeoutPolicy const& getHTTPTimeoutPolicy(void) const { return maturityPreferences_timeout; } /*virtual*/ char const* getName(void) const { return "LLMaturityPreferencesResponder"; } +protected: private: - U8 parseMaturityFromServerResponse(const LLSD &pContent); + U8 parseMaturityFromServerResponse(const LLSD &pContent) const; LLAgent *mAgent; U8 mPreferredMaturity; U8 mPreviousMaturity; }; -LLMaturityPreferencesResponder::LLMaturityPreferencesResponder(LLAgent *pAgent, U8 pPreferredMaturity, U8 pPreviousMaturity) : +LLMaturityPreferencesResponder::LLMaturityPreferencesResponder(LLAgent *pAgent, U8 pPreferredMaturity, U8 pPreviousMaturity) + : mAgent(pAgent), mPreferredMaturity(pPreferredMaturity), mPreviousMaturity(pPreviousMaturity) @@ -2599,75 +2591,49 @@ LLMaturityPreferencesResponder::~LLMaturityPreferencesResponder() { } -void LLMaturityPreferencesResponder::httpSuccess(void) +void LLMaturityPreferencesResponder::httpSuccess() { - U8 actualMaturity = parseMaturityFromServerResponse(mContent); + U8 actualMaturity = parseMaturityFromServerResponse(getContent()); if (actualMaturity != mPreferredMaturity) { - llwarns << "while attempting to change maturity preference from '" << LLViewerRegion::accessToString(mPreviousMaturity) - << "' to '" << LLViewerRegion::accessToString(mPreferredMaturity) << "', the server responded with '" - << LLViewerRegion::accessToString(actualMaturity) << "' [value:" << static_cast(actualMaturity) << ", llsd:" - << mContent << "]" << llendl; + llwarns << "while attempting to change maturity preference from '" + << LLViewerRegion::accessToString(mPreviousMaturity) + << "' to '" << LLViewerRegion::accessToString(mPreferredMaturity) + << "', the server responded with '" + << LLViewerRegion::accessToString(actualMaturity) + << "' [value:" << static_cast(actualMaturity) + << "], " << dumpResponse() << llendl; } mAgent->handlePreferredMaturityResult(actualMaturity); } -void LLMaturityPreferencesResponder::httpFailure(void) +void LLMaturityPreferencesResponder::httpFailure() { - llwarns << "while attempting to change maturity preference from '" << LLViewerRegion::accessToString(mPreviousMaturity) - << "' to '" << LLViewerRegion::accessToString(mPreferredMaturity) << "', we got an error because '" - << mReason << "' [status:" << mStatus << "]" << llendl; + llwarns << "while attempting to change maturity preference from '" + << LLViewerRegion::accessToString(mPreviousMaturity) + << "' to '" << LLViewerRegion::accessToString(mPreferredMaturity) + << "', " << dumpResponse() << llendl; mAgent->handlePreferredMaturityError(); } -U8 LLMaturityPreferencesResponder::parseMaturityFromServerResponse(const LLSD &pContent) +U8 LLMaturityPreferencesResponder::parseMaturityFromServerResponse(const LLSD &pContent) const { - // stinson 05/24/2012 Pathfinding regions have re-defined the response behavior. In the old server code, - // if you attempted to change the preferred maturity to the same value, the response content would be an - // undefined LLSD block. In the new server code with pathfinding, the response content should always be - // defined. Thus, the check for isUndefined() can be replaced with an assert after pathfinding is merged - // into server trunk and fully deployed. U8 maturity = SIM_ACCESS_MIN; - if (pContent.isUndefined()) + + llassert(pContent.isDefined()); + llassert(pContent.isMap()); + llassert(pContent.has("access_prefs")); + llassert(pContent.get("access_prefs").isMap()); + llassert(pContent.get("access_prefs").has("max")); + llassert(pContent.get("access_prefs").get("max").isString()); + if (pContent.isDefined() && pContent.isMap() && pContent.has("access_prefs") + && pContent.get("access_prefs").isMap() && pContent.get("access_prefs").has("max") + && pContent.get("access_prefs").get("max").isString()) { - maturity = mPreferredMaturity; - } - else - { - llassert(!pContent.isUndefined()); - llassert(pContent.isMap()); - - if (!pContent.isUndefined() && pContent.isMap()) - { - // stinson 05/24/2012 Pathfinding regions have re-defined the response syntax. The if statement catches - // the new syntax, and the else statement catches the old syntax. After pathfinding is merged into - // server trunk and fully deployed, we can remove the else statement. - if (pContent.has("access_prefs")) - { - llassert(pContent.has("access_prefs")); - llassert(pContent.get("access_prefs").isMap()); - llassert(pContent.get("access_prefs").has("max")); - llassert(pContent.get("access_prefs").get("max").isString()); - if (pContent.get("access_prefs").isMap() && pContent.get("access_prefs").has("max") && - pContent.get("access_prefs").get("max").isString()) - { - LLSD::String actualPreference = pContent.get("access_prefs").get("max").asString(); - LLStringUtil::trim(actualPreference); - maturity = LLViewerRegion::shortStringToAccess(actualPreference); - } - } - else if (pContent.has("max")) - { - llassert(pContent.get("max").isString()); - if (pContent.get("max").isString()) - { - LLSD::String actualPreference = pContent.get("max").asString(); - LLStringUtil::trim(actualPreference); - maturity = LLViewerRegion::shortStringToAccess(actualPreference); - } - } - } + LLSD::String actualPreference = pContent.get("access_prefs").get("max").asString(); + LLStringUtil::trim(actualPreference); + maturity = LLViewerRegion::shortStringToAccess(actualPreference); } return maturity; @@ -2802,7 +2768,7 @@ void LLAgent::sendMaturityPreferenceToServer(U8 pPreferredMaturity) mLastKnownRequestMaturity = pPreferredMaturity; // Create a response handler - boost::intrusive_ptr responderPtr = new LLMaturityPreferencesResponder(this, pPreferredMaturity, mLastKnownResponseMaturity); + boost::intrusive_ptr responderPtr = boost::intrusive_ptr(new LLMaturityPreferencesResponder(this, pPreferredMaturity, mLastKnownResponseMaturity)); // If we don't have a region, report it as an error if (getRegion() == NULL) @@ -2817,7 +2783,8 @@ void LLAgent::sendMaturityPreferenceToServer(U8 pPreferredMaturity) // If the capability is not defined, report it as an error if (url.empty()) { - responderPtr->failureResult(0U, "capability 'UpdateAgentInformation' is not defined for region", LLSD()); + responderPtr->failureResult(0U, + "capability 'UpdateAgentInformation' is not defined for region", LLSD()); } else { @@ -2881,12 +2848,11 @@ void LLAgent::handleMaturity(const LLSD &pNewValue) sendMaturityPreferenceToServer(static_cast(pNewValue.asInteger())); } +//---------------------------------------------------------------------------- + void LLAgent::buildFullname(std::string& name) const { - if (isAgentAvatarValid()) - { - name = gAgentAvatarp->getFullname(); - } + if (isAgentAvatarValid()) name = gAgentAvatarp->getFullname(); } void LLAgent::buildFullnameAndTitle(std::string& name) const @@ -2912,10 +2878,10 @@ BOOL LLAgent::isInGroup(const LLUUID& group_id, BOOL ignore_god_mode /* FALSE */ if (!ignore_god_mode && isGodlike()) return true; - S32 count = mGroups.count(); - for(S32 i = 0; i < count; ++i) + U32 count = mGroups.size(); + for(U32 i = 0; i < count; ++i) { - if(mGroups.get(i).mID == group_id) + if(mGroups[i].mID == group_id) { return TRUE; } @@ -2932,12 +2898,12 @@ BOOL LLAgent::hasPowerInGroup(const LLUUID& group_id, U64 power) const // GP_NO_POWERS can also mean no power is enough to grant an ability. if (GP_NO_POWERS == power) return FALSE; - S32 count = mGroups.count(); - for(S32 i = 0; i < count; ++i) + U32 count = mGroups.size(); + for(U32 i = 0; i < count; ++i) { - if(mGroups.get(i).mID == group_id) + if(mGroups[i].mID == group_id) { - return (BOOL)((mGroups.get(i).mPowers & power) > 0); + return (BOOL)((mGroups[i].mPowers & power) > 0); } } return FALSE; @@ -2953,12 +2919,12 @@ U64 LLAgent::getPowerInGroup(const LLUUID& group_id) const if (isGodlike()) return GP_ALL_POWERS; - S32 count = mGroups.count(); - for(S32 i = 0; i < count; ++i) + U32 count = mGroups.size(); + for(U32 i = 0; i < count; ++i) { - if(mGroups.get(i).mID == group_id) + if(mGroups[i].mID == group_id) { - return (mGroups.get(i).mPowers); + return (mGroups[i].mPowers); } } @@ -2967,12 +2933,12 @@ U64 LLAgent::getPowerInGroup(const LLUUID& group_id) const BOOL LLAgent::getGroupData(const LLUUID& group_id, LLGroupData& data) const { - S32 count = mGroups.count(); + S32 count = mGroups.size(); for(S32 i = 0; i < count; ++i) { - if(mGroups.get(i).mID == group_id) + if(mGroups[i].mID == group_id) { - data = mGroups.get(i); + data = mGroups[i]; return TRUE; } } @@ -2981,12 +2947,12 @@ BOOL LLAgent::getGroupData(const LLUUID& group_id, LLGroupData& data) const S32 LLAgent::getGroupContribution(const LLUUID& group_id) const { - S32 count = mGroups.count(); + S32 count = mGroups.size(); for(S32 i = 0; i < count; ++i) { - if(mGroups.get(i).mID == group_id) + if(mGroups[i].mID == group_id) { - S32 contribution = mGroups.get(i).mContribution; + S32 contribution = mGroups[i].mContribution; return contribution; } } @@ -2995,12 +2961,12 @@ S32 LLAgent::getGroupContribution(const LLUUID& group_id) const BOOL LLAgent::setGroupContribution(const LLUUID& group_id, S32 contribution) { - S32 count = mGroups.count(); + S32 count = mGroups.size(); for(S32 i = 0; i < count; ++i) { - if(mGroups.get(i).mID == group_id) + if(mGroups[i].mID == group_id) { - mGroups.get(i).mContribution = contribution; + mGroups[i].mContribution = contribution; LLMessageSystem* msg = gMessageSystem; msg->newMessage("SetGroupContribution"); msg->nextBlock("AgentData"); @@ -3018,14 +2984,13 @@ BOOL LLAgent::setGroupContribution(const LLUUID& group_id, S32 contribution) BOOL LLAgent::setUserGroupFlags(const LLUUID& group_id, BOOL accept_notices, BOOL list_in_profile) { - S32 count = mGroups.count(); + S32 count = mGroups.size(); for(S32 i = 0; i < count; ++i) { - LLGroupData &group = mGroups.get(i); - if(group.mID == group_id) + if(mGroups[i].mID == group_id) { - group.mAcceptNotices = accept_notices; - group.mListInProfile = list_in_profile; + mGroups[i].mAcceptNotices = accept_notices; + mGroups[i].mListInProfile = list_in_profile; LLMessageSystem* msg = gMessageSystem; msg->newMessage("SetGroupAcceptNotices"); msg->nextBlock("AgentData"); @@ -3038,7 +3003,7 @@ BOOL LLAgent::setUserGroupFlags(const LLUUID& group_id, BOOL accept_notices, BOO msg->addBOOL("ListInProfile", list_in_profile); sendReliableMessage(); - update_group_floaters(group.mID); + update_group_floaters(mGroups[i].mID); return TRUE; } @@ -3046,6 +3011,10 @@ BOOL LLAgent::setUserGroupFlags(const LLUUID& group_id, BOOL accept_notices, BOO return FALSE; } +BOOL LLAgent::canJoinGroups() const +{ + return (S32)mGroups.size() < gHippoLimits->getMaxAgentGroups(); +} LLQuaternion LLAgent::getHeadRotation() { @@ -3173,7 +3142,7 @@ void LLAgent::sendRevokePermissions(const LLUUID & target, U32 permissions) msg->nextBlockFast(_PREHASH_Data); msg->addUUIDFast(_PREHASH_ObjectID, target); // Must be in the region - msg->addU32Fast(_PREHASH_ObjectPermissions, permissions); + msg->addS32Fast(_PREHASH_ObjectPermissions, (S32) permissions); sendReliableMessage(); } @@ -3312,9 +3281,19 @@ void LLAgent::getName(std::string& name) } } -const LLColor4 &LLAgent::getEffectColor() +const LLColor4 LLAgent::getEffectColor() { - return *mEffectColor; + LLColor4 effect_color = *mEffectColor; + + // Rainbow Particle Effects + static LLCachedControl AlchemyRainbowEffects(gSavedSettings, "AlchemyRainbowEffects"); + if(AlchemyRainbowEffects) + { + LLColor3 rainbow; + rainbow.setHSL(fmodf((F32)LLFrameTimer::getElapsedSeconds()/4.f, 1.f), 1.f, 0.5f); + effect_color.set(rainbow, 1.0f); + } + return effect_color; } void LLAgent::setEffectColor(const LLColor4 &color) @@ -3364,6 +3343,7 @@ BOOL LLAgent::downGrabbed() const void update_group_floaters(const LLUUID& group_id) { + LLGroupActions::refresh(group_id); // update avatar info @@ -3394,10 +3374,10 @@ void LLAgent::processAgentDropGroup(LLMessageSystem *msg, void **) // Remove the group if it already exists remove it and add the new data to pick up changes. LLGroupData gd; gd.mID = group_id; - S32 index = gAgent.mGroups.find(gd); - if (index != -1) + std::vector::iterator found_it = std::find(gAgent.mGroups.begin(), gAgent.mGroups.end(), gd); + if (found_it != gAgent.mGroups.end()) { - gAgent.mGroups.remove(index); + gAgent.mGroups.erase(found_it); if (gAgent.getGroupID() == group_id) { gAgent.mGroupID.setNull(); @@ -3434,8 +3414,7 @@ class LLAgentDropGroupViewerNode : public LLHTTPNode !input.has("body") ) { //what to do with badly formed message? - response->statusUnknownError(400); - response->result(LLSD("Invalid message parameters")); + response->extendedResult(HTTP_BAD_REQUEST, "", LLSD("Invalid message parameters")); } LLSD body = input["body"]; @@ -3473,10 +3452,10 @@ class LLAgentDropGroupViewerNode : public LLHTTPNode // and add the new data to pick up changes. LLGroupData gd; gd.mID = group_id; - S32 index = gAgent.mGroups.find(gd); - if (index != -1) + std::vector::iterator found_it = std::find(gAgent.mGroups.begin(), gAgent.mGroups.end(), gd); + if (found_it != gAgent.mGroups.end()) { - gAgent.mGroups.remove(index); + gAgent.mGroups.erase(found_it); if (gAgent.getGroupID() == group_id) { gAgent.mGroupID.setNull(); @@ -3507,8 +3486,7 @@ class LLAgentDropGroupViewerNode : public LLHTTPNode else { //what to do with badly formed message? - response->statusUnknownError(400); - response->result(LLSD("Invalid message parameters")); + response->extendedResult(HTTP_BAD_REQUEST, "", LLSD("Invalid message parameters")); } } }; @@ -3532,7 +3510,6 @@ void LLAgent::processAgentGroupDataUpdate(LLMessageSystem *msg, void **) S32 count = msg->getNumberOfBlocksFast(_PREHASH_GroupData); LLGroupData group; - S32 index = -1; bool need_floater_update = false; for(S32 i = 0; i < count; ++i) { @@ -3547,12 +3524,12 @@ void LLAgent::processAgentGroupDataUpdate(LLMessageSystem *msg, void **) { need_floater_update = true; // Remove the group if it already exists remove it and add the new data to pick up changes. - index = gAgent.mGroups.find(group); - if (index != -1) + std::vector::iterator found_it = std::find(gAgent.mGroups.begin(), gAgent.mGroups.end(), group); + if (found_it != gAgent.mGroups.end()) { - gAgent.mGroups.remove(index); + gAgent.mGroups.erase(found_it); } - gAgent.mGroups.put(group); + gAgent.mGroups.push_back(group); } if (need_floater_update) { @@ -3591,7 +3568,6 @@ class LLAgentGroupDataUpdateViewerNode : public LLHTTPNode { LLGroupData group; - S32 index = -1; bool need_floater_update = false; group.mID = (*iter_group)["GroupID"].asUUID(); @@ -3608,12 +3584,12 @@ class LLAgentGroupDataUpdateViewerNode : public LLHTTPNode { need_floater_update = true; // Remove the group if it already exists remove it and add the new data to pick up changes. - index = gAgent.mGroups.find(group); - if (index != -1) + std::vector::iterator found_it = std::find(gAgent.mGroups.begin(), gAgent.mGroups.end(), group); + if (found_it != gAgent.mGroups.end()) { - gAgent.mGroups.remove(index); + gAgent.mGroups.erase(found_it); } - gAgent.mGroups.put(group); + gAgent.mGroups.push_back(group); } if (need_floater_update) { @@ -3692,12 +3668,9 @@ void LLAgent::processScriptControlChange(LLMessageSystem *msg, void **) total_count++; } } - + // Any control taken? If so, might be first time. - if (total_count > 0) - { - LLFirstUse::useOverrideKeys(); - } + if (total_count > 0) LLFirstUse::useOverrideKeys(); } else { @@ -3813,7 +3786,7 @@ void LLAgent::processAgentCachedTextureResponse(LLMessageSystem *mesgsys, void * return; } - if (isAgentAvatarValid() && gAgentAvatarp->isEditingAppearance()) + if (gAgentAvatarp->isEditingAppearance()) { // ignore baked textures when in customize mode return; @@ -3973,7 +3946,8 @@ bool LLAgent::teleportCore(bool is_local) LLFloaterWorldMap::hide(); // hide land floater too - it'll be out of date - LLFloaterLand::hideInstance(); + if (LLFloaterLand::findInstance()) + LLFloaterLand::hideInstance(); LLViewerParcelMgr::getInstance()->deselectLand(); LLViewerMediaFocus::getInstance()->clearFocus(); diff --git a/indra/newview/llagent.h b/indra/newview/llagent.h index a66b375f4..6294d2e0a 100644 --- a/indra/newview/llagent.h +++ b/indra/newview/llagent.h @@ -36,7 +36,6 @@ #include #include "indra_constants.h" - #include "llevent.h" // LLObservable base class #include "llagentconstants.h" #include "llagentdata.h" // gAgentID, gAgentSessionID @@ -72,9 +71,12 @@ class LLSLURL; class LLSimInfo; class LLTeleportRequest; -typedef std::vector llvo_vec_t; typedef boost::shared_ptr LLTeleportRequestPtr; +//-------------------------------------------------------------------- +// Types +//-------------------------------------------------------------------- + enum EAnimRequest { ANIM_REQUEST_START, @@ -213,7 +215,7 @@ public: //-------------------------------------------------------------------- public: const LLCoordFrame& getFrameAgent() const { return mFrameAgent; } - void initOriginGlobal(const LLVector3d &origin_global); // Only to be used in ONE place! - djs 08/07/02 + void initOriginGlobal(const LLVector3d &origin_global); // Only to be used in ONE place void resetAxes(); void resetAxes(const LLVector3 &look_at); // Makes reasonable left and up // The following three get*Axis functions return direction avatar is looking, not camera. @@ -238,15 +240,52 @@ private: U64 mHomeRegionHandle; LLVector3 mHomePosRegion; + //-------------------------------------------------------------------- + // Parcel + //-------------------------------------------------------------------- +public: + void changeParcels(); // called by LLViewerParcelMgr when we cross a parcel boundary + + // Register a boost callback to be called when the agent changes parcels + typedef boost::function parcel_changed_callback_t; + boost::signals2::connection addParcelChangedCallback(parcel_changed_callback_t); + +private: + typedef boost::signals2::signal parcel_changed_signal_t; + parcel_changed_signal_t mParcelChangedSignal; + //-------------------------------------------------------------------- // Region //-------------------------------------------------------------------- public: void setRegion(LLViewerRegion *regionp); - LLViewerRegion *getRegion() const { return mRegionp; } + LLViewerRegion *getRegion() const; const LLHost& getRegionHost() const; BOOL inPrelude(); + /** + * Register a boost callback to be called when the agent changes regions + * Note that if you need to access a capability for the region, you may need to wait + * for the capabilities to be received, since in some cases your region changed + * callback will be called before the capabilities have been received. Your callback + * may need to look something like: + * + * LLViewerRegion* region = gAgent.getRegion(); + * if (region->capabilitiesReceived()) + * { + * useCapability(region); + * } + * else // Need to handle via callback after caps arrive. + * { + * region->setCapabilitiesReceivedCallback(boost::bind(&useCapability,region,_1)); + * // you may or may not want to remove that callback + * } + */ + typedef boost::signals2::signal region_changed_signal_t; + + boost::signals2::connection addRegionChangedCallback(const region_changed_signal_t::slot_type& cb); + void removeRegionChangedCallback(boost::signals2::connection callback); + // struct SHLureRequest { @@ -260,9 +299,10 @@ public: void showLureDestination(const std::string fromname, U64& handle, U32 x, U32 y, U32 z); void onFoundLureDestination(LLSimInfo *siminfo = NULL); // - + private: LLViewerRegion *mRegionp; + region_changed_signal_t mRegionChangedSignal; //-------------------------------------------------------------------- // History @@ -274,6 +314,7 @@ public: const LLVector3d &getLastPositionGlobal() const { return mLastPositionGlobal; } void setLastPositionGlobal(const LLVector3d &pos) { mLastPositionGlobal = pos; } + private: std::set mRegionsVisited; // Stat - what distinct regions has the avatar been to? F64 mDistanceTraveled; // Stat - how far has the avatar moved? @@ -654,6 +695,7 @@ private: void handleTeleportFinished(); void handleTeleportFailed(); +public: void handleServerBakeRegionTransition(const LLUUID& region_id); //-------------------------------------------------------------------- @@ -682,9 +724,10 @@ private: public: bool canEditParcel() const { return mCanEditParcel; } private: + static void setCanEditParcel(); bool mCanEditParcel; - static void parcelChangedCallback(); + /******************************************************************************** ** ** @@ -807,7 +850,7 @@ private: // HUD //-------------------------------------------------------------------- public: - const LLColor4 &getEffectColor(); + const LLColor4 getEffectColor(); void setEffectColor(const LLColor4 &color); private: LLColor4 *mEffectColor; @@ -831,6 +874,7 @@ public: BOOL setGroupContribution(const LLUUID& group_id, S32 contribution); BOOL setUserGroupFlags(const LLUUID& group_id, BOOL accept_notices, BOOL list_in_profile); const std::string &getGroupName() const { return mGroupName; } + BOOL canJoinGroups() const; private: std::string mGroupName; LLUUID mGroupID; @@ -845,7 +889,7 @@ protected: // Only used for building titles. BOOL isGroupMember() const { return !mGroupID.isNull(); } public: - LLDynamicArray mGroups; + std::vector mGroups; //-------------------------------------------------------------------- // Group Title diff --git a/indra/newview/llappearancemgr.cpp b/indra/newview/llappearancemgr.cpp index 6294e62af..bffaafd3c 100644 --- a/indra/newview/llappearancemgr.cpp +++ b/indra/newview/llappearancemgr.cpp @@ -113,7 +113,7 @@ public: }; // support for secondlife:///app/appearance SLapps -/*class LLAppearanceHandler : public LLCommandHandler +class LLAppearanceHandler : public LLCommandHandler { public: // requests will be throttled from a non-trusted browser @@ -121,6 +121,7 @@ public: bool handle(const LLSD& params, const LLSD& query_map, LLMediaCtrl* web) { + /* Singu Note: Nopenopenope. // support secondlife:///app/appearance/show, but for now we just // make all secondlife:///app/appearance SLapps behave this way if (!LLUI::sSettingGroups["config"]->getBOOL("EnableAppearance")) @@ -128,13 +129,14 @@ public: LLNotificationsUtil::add("NoAppearance", LLSD(), LLSD(), std::string("SwitchToStandardSkinAndQuit")); return true; } + */ - LLFloaterSidePanelContainer::showPanel("appearance", LLSD()); + LLFloaterCustomize::getInstance()->open(); return true; } }; -LLAppearanceHandler gAppearanceHandler;*/ +LLAppearanceHandler gAppearanceHandler; LLUUID findDescendentCategoryIDByName(const LLUUID& parent_id, const std::string& name) @@ -147,11 +149,11 @@ LLUUID findDescendentCategoryIDByName(const LLUUID& parent_id, const std::string item_array, LLInventoryModel::EXCLUDE_TRASH, has_name); - if (0 == cat_array.count()) + if (0 == cat_array.size()) return LLUUID(); else { - LLViewerInventoryCategory *cat = cat_array.get(0); + LLViewerInventoryCategory *cat = cat_array.at(0); if (cat) return cat->getUUID(); else @@ -215,11 +217,10 @@ public: // Request or re-request operation for specified item. void addItem(const LLUUID& item_id) { - LL_DEBUGS("Avatar") << "item_id " << item_id << llendl; - + LL_DEBUGS("Avatar") << "item_id " << item_id << LL_ENDL; if (!requestOperation(item_id)) { - LL_DEBUGS("Avatar") << "item_id " << item_id << " requestOperation false, skipping" << llendl; + LL_DEBUGS("Avatar") << "item_id " << item_id << " requestOperation false, skipping" << LL_ENDL; return; } @@ -249,7 +250,7 @@ public: } mPendingRequests--; F32 elapsed = timestamp.getElapsedTimeF32(); - LL_DEBUGS("Avatar") << "op done, src_id " << src_id << " dst_id " << dst_id << " after " << elapsed << " seconds" << llendl; + LL_DEBUGS("Avatar") << "op done, src_id " << src_id << " dst_id " << dst_id << " after " << elapsed << " seconds" << LL_ENDL; if (mWaitTimes.find(src_id) == mWaitTimes.end()) { // No longer waiting for this item - either serviced @@ -353,16 +354,16 @@ public: void reportStats() { - LL_DEBUGS("Avatar") << "Phase: " << mTrackingPhase << llendl; - LL_DEBUGS("Avatar") << "mFailCount: " << mFailCount << llendl; - LL_DEBUGS("Avatar") << "mRetryCount: " << mRetryCount << llendl; - LL_DEBUGS("Avatar") << "Times: n " << mTimeStats.getCount() << " min " << mTimeStats.getMinValue() << " max " << mTimeStats.getMaxValue() << llendl; - LL_DEBUGS("Avatar") << "Mean " << mTimeStats.getMean() << " stddev " << mTimeStats.getStdDev() << llendl; + LL_DEBUGS("Avatar") << "Phase: " << mTrackingPhase << LL_ENDL; + LL_DEBUGS("Avatar") << "mFailCount: " << mFailCount << LL_ENDL; + LL_DEBUGS("Avatar") << "mRetryCount: " << mRetryCount << LL_ENDL; + LL_DEBUGS("Avatar") << "Times: n " << mTimeStats.getCount() << " min " << mTimeStats.getMinValue() << " max " << mTimeStats.getMaxValue() << LL_ENDL; + LL_DEBUGS("Avatar") << "Mean " << mTimeStats.getMean() << " stddev " << mTimeStats.getStdDev() << LL_ENDL; } virtual ~LLCallAfterInventoryBatchMgr() { - LL_DEBUGS("Avatar") << "deleting" << llendl; + LL_DEBUGS("Avatar") << "deleting" << LL_ENDL; } protected: @@ -395,16 +396,22 @@ public: LLCallAfterInventoryBatchMgr(dst_cat_id, phase_name, on_completion_func, on_failure_func, retry_after, max_retries) { addItems(src_items); + sInstanceCount++; + } + + ~LLCallAfterInventoryCopyMgr() + { + sInstanceCount--; } virtual bool requestOperation(const LLUUID& item_id) { LLViewerInventoryItem *item = gInventory.getItem(item_id); llassert(item); - LL_DEBUGS("Avatar") << "copying item " << item_id << llendl; + LL_DEBUGS("Avatar") << "copying item " << item_id << LL_ENDL; if (ll_frand() < gSavedSettings.getF32("InventoryDebugSimulateOpFailureRate")) { - LL_DEBUGS("Avatar") << "simulating failure by not sending request for item " << item_id << llendl; + LL_DEBUGS("Avatar") << "simulating failure by not sending request for item " << item_id << LL_ENDL; return true; } copy_inventory_item( @@ -417,8 +424,15 @@ public: ); return true; } + + static S32 getInstanceCount() { return sInstanceCount; } + +private: + static S32 sInstanceCount; }; +S32 LLCallAfterInventoryCopyMgr::sInstanceCount = 0; + class LLCallAfterInventoryLinkMgr: public LLCallAfterInventoryBatchMgr { public: @@ -2635,6 +2649,11 @@ void LLAppearanceMgr::wearInventoryCategory(LLInventoryCategory* category, bool category->getUUID(), copy, append)); } +S32 LLAppearanceMgr::getActiveCopyOperations() const +{ + return LLCallAfterInventoryCopyMgr::getInstanceCount(); +} + void LLAppearanceMgr::wearCategoryFinal(LLUUID& cat_id, bool copy_items, bool append) { LL_INFOS("Avatar") << self_av_string() << "starting" << LL_ENDL; @@ -2733,6 +2752,7 @@ void LLAppearanceMgr::wearInventoryCategoryOnAvatar( LLInventoryCategory* catego LLAppearanceMgr::changeOutfit(TRUE, category->getUUID(), append); } +// FIXME do we really want to search entire inventory for matching name? void LLAppearanceMgr::wearOutfitByName(const std::string& name) { LL_INFOS("Avatar") << self_av_string() << "Wearing category " << name << LL_ENDL; @@ -2747,10 +2767,10 @@ void LLAppearanceMgr::wearOutfitByName(const std::string& name) has_name); bool copy_items = false; LLInventoryCategory* cat = NULL; - if (cat_array.count() > 0) + if (cat_array.size() > 0) { // Just wear the first one that matches - cat = cat_array.get(0); + cat = cat_array.at(0); } else { @@ -2759,9 +2779,9 @@ void LLAppearanceMgr::wearOutfitByName(const std::string& name) item_array, LLInventoryModel::EXCLUDE_TRASH, has_name); - if(cat_array.count() > 0) + if(cat_array.size() > 0) { - cat = cat_array.get(0); + cat = cat_array.at(0); copy_items = true; } } @@ -2775,8 +2795,6 @@ void LLAppearanceMgr::wearOutfitByName(const std::string& name) llwarns << "Couldn't find outfit " <getWearableType(); const bool is_body_part = (wearable_type == LLWearableType::WT_SHAPE) @@ -2958,18 +2976,24 @@ LLInventoryModel::item_array_t LLAppearanceMgr::findCOFItemLinks(const LLUUID& i cat_array, item_array, LLInventoryModel::EXCLUDE_TRASH); - for (S32 i=0; igetLinkedUUID() == vitem->getLinkedUUID()) { - result.put(item_array.get(i)); + result.push_back(item_array.at(i)); } } } return result; } +bool LLAppearanceMgr::isLinkedInCOF(const LLUUID& item_id) +{ + LLInventoryModel::item_array_t links = LLAppearanceMgr::instance().findCOFItemLinks(item_id); + return links.size() > 0; +} + void LLAppearanceMgr::removeAllClothesFromAvatar() { // Fetch worn clothes (i.e. the ones in COF). @@ -3035,27 +3059,13 @@ void LLAppearanceMgr::removeCOFItemLinks(const LLUUID& item_id) cat_array, item_array, LLInventoryModel::EXCLUDE_TRASH); - for (S32 i=0; igetIsLinkType() && item->getLinkedUUID() == item_id) { -#if 0 // LL_RELEASE_WITH_DEBUG_INFO || LL_DEBUG - // NOTE-RLVa: debug-only, can be removed down the line - if (rlv_handler_t::isEnabled()) - { - RLV_ASSERT(rlvPredCanRemoveItem(item)); - } -#endif // LL_RELEASE_WITH_DEBUG_INFO || LL_DEBUG gInventory.purgeObject(item->getUUID()); } -// [/RLVa:KB] -// const LLInventoryItem* item = item_array.get(i).get(); -// if (item->getIsLinkType() && item->getLinkedUUID() == item_id) -// { -// gInventory.purgeObject(item->getUUID()); -// } } } @@ -3072,16 +3082,6 @@ void LLAppearanceMgr::removeCOFLinksOfType(LLWearableType::EType type) const LLViewerInventoryItem* item = *it; if (item->getIsLinkType()) // we must operate on links only { -// [RLVa:KB] - Checked: 2013-02-12 (RLVa-1.4.8) -#if 0 // LL_RELEASE_WITH_DEBUG_INFO || LL_DEBUG - // NOTE-RLVa: debug-only, can be removed down the line - if (rlv_handler_t::isEnabled()) - { - RLV_ASSERT(rlvPredCanRemoveItem(item)); - } -#endif // LL_RELEASE_WITH_DEBUG_INFO || LL_DEBUG -// [/RLVa:KB] - gInventory.purgeObject(item->getUUID()); } } @@ -3091,7 +3091,7 @@ bool sort_by_linked_uuid(const LLViewerInventoryItem* item1, const LLViewerInven { if (!item1 || !item2) { - llwarning("item1, item2 cannot be null, something is very wrong", 0); + llwarns << "item1, item2 cannot be null, something is very wrong" << llendl; return true; } @@ -3133,8 +3133,9 @@ void LLAppearanceMgr::updateIsDirty() gInventory.collectDescendentsIf(base_outfit, outfit_cats, outfit_items, LLInventoryModel::EXCLUDE_TRASH, collector); - if(outfit_items.count() != cof_items.count()) + if(outfit_items.size() != cof_items.size()) { + LL_DEBUGS("Avatar") << "item count different - base " << outfit_items.size() << " cof " << cof_items.size() << LL_ENDL; // Current outfit folder should have one more item than the outfit folder. // this one item is the link back to the outfit folder itself. mOutfitIsDirty = true; @@ -3147,18 +3148,37 @@ void LLAppearanceMgr::updateIsDirty() for (U32 i = 0; i < cof_items.size(); ++i) { - LLViewerInventoryItem *item1 = cof_items.get(i); - LLViewerInventoryItem *item2 = outfit_items.get(i); + LLViewerInventoryItem *item1 = cof_items.at(i); + LLViewerInventoryItem *item2 = outfit_items.at(i); if (item1->getLinkedUUID() != item2->getLinkedUUID() || item1->getName() != item2->getName() || item1->getActualDescription() != item2->getActualDescription()) { + if (item1->getLinkedUUID() != item2->getLinkedUUID()) + { + LL_DEBUGS("Avatar") << "link id different " << LL_ENDL; + } + else + { + if (item1->getName() != item2->getName()) + { + LL_DEBUGS("Avatar") << "name different " << item1->getName() << " " << item2->getName() << LL_ENDL; + } + if (item1->getActualDescription() != item2->getActualDescription()) + { + LL_DEBUGS("Avatar") << "desc different " << item1->getActualDescription() + << " " << item2->getActualDescription() + << " names " << item1->getName() << " " << item2->getName() << LL_ENDL; + } + } mOutfitIsDirty = true; return; } } } + llassert(!mOutfitIsDirty); + LL_DEBUGS("Avatar") << "clean" << LL_ENDL; } // *HACK: Must match name in Library or agent inventory @@ -3240,23 +3260,6 @@ void LLAppearanceMgr::copyLibraryGestures() } } -void LLAppearanceMgr::autopopulateOutfits() -{ - // If this is the very first time the user has logged into viewer2+ (from a legacy viewer, or new account) - // then auto-populate outfits from the library into the My Outfits folder. - - LL_INFOS("Avatar") << self_av_string() << "avatar fully visible" << LL_ENDL; - - static bool check_populate_my_outfits = true; - if (check_populate_my_outfits && - (LLInventoryModel::getIsFirstTimeInViewer2() - || gSavedSettings.getBOOL("MyOutfitsAutofill"))) - { - gAgentWearables.populateMyOutfitsFolder(); - } - check_populate_my_outfits = false; -} - // Handler for anything that's deferred until avatar de-clouds. void LLAppearanceMgr::onFirstFullyVisible() { @@ -3264,10 +3267,6 @@ void LLAppearanceMgr::onFirstFullyVisible() gAgentAvatarp->reportAvatarRezTime(); gAgentAvatarp->debugAvatarVisible(); - // The auto-populate is failing at the point of generating outfits - // folders, so don't do the library copy until that is resolved. - // autopopulateOutfits(); - // If this is the first time we've ever logged in, // then copy default gestures from the library. if (gAgent.isFirstLogin()) { @@ -3293,6 +3292,7 @@ bool LLAppearanceMgr::updateBaseOutfit() llassert(!isOutfitLocked()); return false; } + setOutfitLocked(true); gAgentWearables.notifyLoadingStarted(); @@ -3319,12 +3319,12 @@ void LLAppearanceMgr::divvyWearablesByType(const LLInventoryModel::item_array_t& items_by_type.resize(LLWearableType::WT_COUNT); if (items.empty()) return; - for (S32 i=0; igetActualDescription(); const std::string& desc2 = item2->getActualDescription(); @@ -3376,8 +3370,10 @@ struct WearablesOrderComparator //items with ordering information but not for the associated wearables type if (!item1_valid && item2_valid) return false; + else if (item1_valid && !item2_valid) + return true; - return true; + return item1->getName() < item2->getName(); } U32 mControlSize; @@ -3408,7 +3404,6 @@ void LLAppearanceMgr::updateClothingOrderingInfo(LLUUID cat_id, bool update_base bool inventory_changed = false; for (U32 type = LLWearableType::WT_SHIRT; type < LLWearableType::WT_COUNT; type++) { - U32 size = items_by_type[type].size(); if (!size) continue; @@ -3428,7 +3423,7 @@ void LLAppearanceMgr::updateClothingOrderingInfo(LLUUID cat_id, bool update_base item->setComplete(TRUE); item->updateServer(FALSE); gInventory.updateItem(item); - + inventory_changed = true; } } @@ -3496,31 +3491,16 @@ class RequestAgentUpdateAppearanceResponder: public LLHTTPClient::ResponderWithR { public: virtual AIHTTPTimeoutPolicy const& getHTTPTimeoutPolicy(void) const { return requestAgentUpdateAppearance_timeout; } - RequestAgentUpdateAppearanceResponder() - { - mRetryPolicy = new LLAdaptiveRetryPolicy(1.0, 32.0, 2.0, 10); - } + RequestAgentUpdateAppearanceResponder(); - virtual ~RequestAgentUpdateAppearanceResponder() - { - } + virtual ~RequestAgentUpdateAppearanceResponder(); +protected: // Successful completion. - /* virtual */ void httpSuccess(void) - { - LL_DEBUGS("Avatar") << "content: " << ll_pretty_print_sd(mContent) << LL_ENDL; - if (mContent["success"].asBoolean()) - { - LL_DEBUGS("Avatar") << "OK" << LL_ENDL; - } - else - { - onFailure(200); - } - } + /* virtual */ void httpSuccess(); // Error - /*virtual*/ void httpFailure(void) + /*virtual*/ void httpFailure() { llwarns << "appearance update request failed, " << dumpResponse() << llendl; onFailure(mStatus); @@ -3548,6 +3528,15 @@ public: /*virtual*/ char const* getName(void) const { return "RequestAgentUpdateAppearanceResponder"; } }; +RequestAgentUpdateAppearanceResponder::RequestAgentUpdateAppearanceResponder() +{ + mRetryPolicy = new LLAdaptiveRetryPolicy(1.0, 32.0, 2.0, 10); +} + +RequestAgentUpdateAppearanceResponder::~RequestAgentUpdateAppearanceResponder() +{ +} + void LLAppearanceMgr::requestServerAppearanceUpdate(LLHTTPClient::ResponderPtr responder_ptr) { if (gAgentAvatarp->isEditingAppearance()) @@ -3638,6 +3627,41 @@ void scroll_to_folder(const LLUUID& folder_id) } } +/* virtual */ void RequestAgentUpdateAppearanceResponder::httpSuccess() +{ + const LLSD& content = getContent(); + if (!content.isMap()) + { + failureResult(400, "Malformed response contents", content); + return; + } + if (content["success"].asBoolean()) + { + LL_DEBUGS("Avatar") << "succeeded" << LL_ENDL; + static LLCachedControl debug_ava_appr_msg(gSavedSettings, "DebugAvatarAppearanceMessage"); + if (debug_ava_appr_msg) + { + dump_sequential_xml(gAgentAvatarp->getFullname() + "_appearance_request_ok", content); + } + + //onSuccess(); + } + else + { + failureResult(400, "Non-success response", content); + } +} + +std::string LLAppearanceMgr::getAppearanceServiceURL() const +{ + if (gSavedSettings.getString("AgentAppearanceServiceURL").empty()) + { + return mAppearanceServiceURL; + } + return gSavedSettings.getString("AgentAppearanceServiceURL"); // Singu TODO: Use "DebugAvatarAppearanceServiceURLOverride" +} + + class LLBoostFuncInventoryCallbackFireOnce : public LLBoostFuncInventoryCallback { public: diff --git a/indra/newview/llappearancemgr.h b/indra/newview/llappearancemgr.h index b3539de66..887e7991a 100644 --- a/indra/newview/llappearancemgr.h +++ b/indra/newview/llappearancemgr.h @@ -78,6 +78,8 @@ public: LLInventoryModel::item_array_t& items_to_kill); void enforceItemRestrictions(); + S32 getActiveCopyOperations() const; + // Copy all items and the src category itself. void shallowCopyCategory(const LLUUID& src_id, const LLUUID& dst_id, LLPointer cb); @@ -153,6 +155,7 @@ public: // Find COF entries referencing the given item. LLInventoryModel::item_array_t findCOFItemLinks(const LLUUID& item_id); + bool isLinkedInCOF(const LLUUID& item_id); // Remove COF entries void removeCOFItemLinks(const LLUUID& item_id); @@ -213,6 +216,13 @@ public: void requestServerAppearanceUpdate(LLHTTPClient::ResponderPtr responder_ptr = NULL); + void setAppearanceServiceURL(const std::string& url) { mAppearanceServiceURL = url; } + std::string getAppearanceServiceURL() const; + +private: + std::string mAppearanceServiceURL; + + protected: LLAppearanceMgr(); ~LLAppearanceMgr(); @@ -255,7 +265,7 @@ private: */ bool mOutfitLocked; - std::auto_ptr mUnlockOutfitTimer; + boost::scoped_ptr mUnlockOutfitTimer; // [SL:KB] - Patch: Appearance-SyncAttach | Checked: 2010-09-18 (Catznip-3.0.0a) | Modified: Catznip-2.1.2e public: diff --git a/indra/newview/llappviewer.cpp b/indra/newview/llappviewer.cpp index caf66d6bc..dc7ffb2a0 100644 --- a/indra/newview/llappviewer.cpp +++ b/indra/newview/llappviewer.cpp @@ -881,9 +881,6 @@ bool LLAppViewer::init() gGLManager.getGLInfo(gDebugInfo); gGLManager.printGLInfoString(); - //load key settings - bind_keyboard_functions(); - // Load Default bindings load_default_bindings(gSavedSettings.getBOOL("LiruUseZQSDKeys")); @@ -3705,37 +3702,55 @@ static LLFastTimer::DeclareTimer FTM_VLMANAGER("VL Manager"); /////////////////////////////////////////////////////// void LLAppViewer::idle() { +//LAZY_FT is just temporary. +#define LAZY_FT(str) static LLFastTimer::DeclareTimer ftm(str); LLFastTimer t(ftm) pingMainloopTimeout("Main:Idle"); - + // Update frame timers static LLTimer idle_timer; - LLFrameTimer::updateFrameTimeAndCount(); - LLEventTimer::updateClass(); - LLCriticalDamp::updateInterpolants(); - LLMortician::updateClass(); - F32 dt_raw = idle_timer.getElapsedTimeAndResetF32(); - - // Cap out-of-control frame times - // Too low because in menus, swapping, debugger, etc. - // Too high because idle called with no objects in view, etc. - const F32 MIN_FRAME_RATE = 1.f; - const F32 MAX_FRAME_RATE = 200.f; - - F32 frame_rate_clamped = 1.f / dt_raw; - frame_rate_clamped = llclamp(frame_rate_clamped, MIN_FRAME_RATE, MAX_FRAME_RATE); - gFrameDTClamped = 1.f / frame_rate_clamped; - - // Global frame timer - // Smoothly weight toward current frame - gFPSClamped = (frame_rate_clamped + (4.f * gFPSClamped)) / 5.f; - - F32 qas = gSavedSettings.getF32("QuitAfterSeconds"); - if (qas > 0.f) { - if (gRenderStartTime.getElapsedTimeF32() > qas) + LAZY_FT("updateFrameTimeAndCount"); + LLFrameTimer::updateFrameTimeAndCount(); + } + { + LAZY_FT("LLEventTimer::updateClass"); + LLEventTimer::updateClass(); + } + { + LAZY_FT("LLCriticalDamp::updateInterpolants"); + LLCriticalDamp::updateInterpolants(); + } + { + LAZY_FT("LLMortician::updateClass"); + LLMortician::updateClass(); + } + F32 dt_raw; + { + LAZY_FT("UpdateGlobalTimers"); + dt_raw = idle_timer.getElapsedTimeAndResetF32(); + + // Cap out-of-control frame times + // Too low because in menus, swapping, debugger, etc. + // Too high because idle called with no objects in view, etc. + const F32 MIN_FRAME_RATE = 1.f; + const F32 MAX_FRAME_RATE = 200.f; + + F32 frame_rate_clamped = 1.f / dt_raw; + frame_rate_clamped = llclamp(frame_rate_clamped, MIN_FRAME_RATE, MAX_FRAME_RATE); + gFrameDTClamped = 1.f / frame_rate_clamped; + + // Global frame timer + // Smoothly weight toward current frame + gFPSClamped = (frame_rate_clamped + (4.f * gFPSClamped)) / 5.f; + + F32 qas = gSavedSettings.getF32("QuitAfterSeconds"); + if (qas > 0.f) { - LLAppViewer::instance()->forceQuit(); + if (gRenderStartTime.getElapsedTimeF32() > qas) + { + LLAppViewer::instance()->forceQuit(); + } } } @@ -3751,38 +3766,44 @@ void LLAppViewer::idle() // Must wait until both have avatar object and mute list, so poll // here. - request_initial_instant_messages(); + { + LAZY_FT("request_initial_instant_messages"); + request_initial_instant_messages(); + } /////////////////////////////////// // // Special case idle if still starting up // - if (LLStartUp::getStartupState() < STATE_STARTED) { - // Skip rest if idle startup returns false (essentially, no world yet) - gGLActive = TRUE; - if (!idle_startup()) + LAZY_FT("idle_startup"); + if (LLStartUp::getStartupState() < STATE_STARTED) { + // Skip rest if idle startup returns false (essentially, no world yet) + gGLActive = TRUE; + if (!idle_startup()) + { + gGLActive = FALSE; + return; + } gGLActive = FALSE; - return; } - gGLActive = FALSE; } - - F32 yaw = 0.f; // radians + + F32 yaw = 0.f; // radians if (!gDisconnected) { LLFastTimer t(FTM_NETWORK); // Update spaceserver timeinfo - LLWorld::getInstance()->setSpaceTimeUSec(LLWorld::getInstance()->getSpaceTimeUSec() + (U32)(dt_raw * SEC_TO_MICROSEC)); - - - ////////////////////////////////////// - // - // Update simulator agent state - // + LLWorld::getInstance()->setSpaceTimeUSec(LLWorld::getInstance()->getSpaceTimeUSec() + (U32)(dt_raw * SEC_TO_MICROSEC)); + + + ////////////////////////////////////// + // + // Update simulator agent state + // if (gSavedSettings.getBOOL("RotateRight")) { @@ -3795,22 +3816,22 @@ void LLAppViewer::idle() gAgentPilot.updateTarget(); gAgent.autoPilot(&yaw); } - - static LLFrameTimer agent_update_timer; - static U32 last_control_flags; - - // When appropriate, update agent location to the simulator. - F32 agent_update_time = agent_update_timer.getElapsedTimeF32(); - BOOL flags_changed = gAgent.controlFlagsDirty() || (last_control_flags != gAgent.getControlFlags()); - - if (flags_changed || (agent_update_time > (1.0f / (F32) AGENT_UPDATES_PER_SECOND))) - { - LLFastTimer t(FTM_AGENT_UPDATE); - // Send avatar and camera info - last_control_flags = gAgent.getControlFlags(); + + static LLFrameTimer agent_update_timer; + static U32 last_control_flags; + + // When appropriate, update agent location to the simulator. + F32 agent_update_time = agent_update_timer.getElapsedTimeF32(); + BOOL flags_changed = gAgent.controlFlagsDirty() || (last_control_flags != gAgent.getControlFlags()); + + if (flags_changed || (agent_update_time > (1.0f / (F32)AGENT_UPDATES_PER_SECOND))) + { + LLFastTimer t(FTM_AGENT_UPDATE); + // Send avatar and camera info + last_control_flags = gAgent.getControlFlags(); send_agent_update(TRUE); - agent_update_timer.reset(); - } + agent_update_timer.reset(); + } } ////////////////////////////////////// @@ -3819,6 +3840,7 @@ void LLAppViewer::idle() // // { + LAZY_FT("Frame Stats"); // Initialize the viewer_stats_timer with an already elapsed time // of SEND_STATS_PERIOD so that the initial stats report will // be sent immediately. @@ -3862,26 +3884,26 @@ void LLAppViewer::idle() } gFrameStats.addFrameData(); } - + if (!gDisconnected) { LLFastTimer t(FTM_NETWORK); - - //////////////////////////////////////////////// - // - // Network processing - // - // NOTE: Starting at this point, we may still have pointers to "dead" objects - // floating throughout the various object lists. - // + + //////////////////////////////////////////////// + // + // Network processing + // + // NOTE: Starting at this point, we may still have pointers to "dead" objects + // floating throughout the various object lists. + // idleNameCache(); - - gFrameStats.start(LLFrameStats::IDLE_NETWORK); + + gFrameStats.start(LLFrameStats::IDLE_NETWORK); stop_glerror(); idleNetwork(); - stop_glerror(); - - gFrameStats.start(LLFrameStats::AGENT_MISC); + stop_glerror(); + + gFrameStats.start(LLFrameStats::AGENT_MISC); // Check for away from keyboard, kick idle agents. idle_afk_check(); @@ -3897,15 +3919,15 @@ void LLAppViewer::idle() // { -// LLFastTimer t(FTM_IDLE_CB); + LLFastTimer t(FTM_IDLE_CB); // Do event notifications if necessary. Yes, we may want to move this elsewhere. gEventNotifier.update(); - + gIdleCallbacks.callFunctions(); gInventory.idleNotifyObservers(); } - + // Metrics logging (LLViewerAssetStats, etc.) { static LLTimer report_interval; @@ -3914,22 +3936,23 @@ void LLAppViewer::idle() F32 seconds = report_interval.getElapsedTimeF32(); if (seconds >= app_metrics_interval) { - metricsSend(! gDisconnected); + LAZY_FT("metricsSend"); + metricsSend(!gDisconnected); report_interval.reset(); } } if (gDisconnected) - { + { return; - } + } - static const LLCachedControl hide_tp_screen("AscentDisableTeleportScreens",false); + static const LLCachedControl hide_tp_screen("AscentDisableTeleportScreens", false); LLAgent::ETeleportState tp_state = gAgent.getTeleportState(); if (!hide_tp_screen && tp_state != LLAgent::TELEPORT_NONE && tp_state != LLAgent::TELEPORT_LOCAL && tp_state != LLAgent::TELEPORT_PENDING) - { + { return; - } + } gViewerWindow->updateUI(); @@ -3939,11 +3962,12 @@ void LLAppViewer::idle() /////////////////////////////////////// // Agent and camera movement // - LLCoordGL current_mouse = gViewerWindow->getCurrentMouse(); + LLCoordGL current_mouse = gViewerWindow->getCurrentMouse(); { // After agent and camera moved, figure out if we need to // deselect objects. + LAZY_FT("deselectAllIfTooFar"); LLSelectMgr::getInstance()->deselectAllIfTooFar(); } @@ -3958,15 +3982,15 @@ void LLAppViewer::idle() } { - LLFastTimer t(FTM_OBJECTLIST_UPDATE); + LLFastTimer t(FTM_OBJECTLIST_UPDATE); gFrameStats.start(LLFrameStats::OBJECT_UPDATE); - - if (!(logoutRequestSent() && hasSavedFinalSnapshot())) + + if (!(logoutRequestSent() && hasSavedFinalSnapshot())) { gObjectList.update(gAgent, *LLWorld::getInstance()); } } - + ////////////////////////////////////// // // Deletes objects... @@ -3985,7 +4009,7 @@ void LLAppViewer::idle() LLDrawable::cleanupDeadDrawables(); } } - + // // After this point, in theory we should never see a dead object // in the various object/drawable lists. @@ -4019,25 +4043,29 @@ void LLAppViewer::idle() LLFastTimer t(FTM_NETWORK); gVLManager.unpackData(); } - + ///////////////////////// // // Update surfaces, and surface textures as well. // - LLWorld::getInstance()->updateVisibilities(); + { + LAZY_FT("updateVisibilities"); + LLWorld::getInstance()->updateVisibilities(); + } { const F32 max_region_update_time = .001f; // 1ms LLFastTimer t(FTM_REGION_UPDATE); LLWorld::getInstance()->updateRegions(max_region_update_time); } - + ///////////////////////// // // Update weather effects // if (!gNoRender) { + LAZY_FT("Weather"); #if ENABLE_CLASSIC_CLOUDS LLWorld::getInstance()->updateClouds(gFrameDTClamped); #endif @@ -4054,7 +4082,7 @@ void LLAppViewer::idle() gWindVec = regionp->mWind.getVelocity(wind_position_region); // Compute average wind and use to drive motion of water - + average_wind = regionp->mWind.getAverage(); #if ENABLE_CLASSIC_CLOUDS F32 cloud_density = regionp->mCloudLayer.getDensityRegion(wind_position_region); @@ -4069,13 +4097,13 @@ void LLAppViewer::idle() } } stop_glerror(); - + ////////////////////////////////////// // // Sort and cull in the new renderer are moved to pipeline.cpp // Here, particles are updated and drawables are moved. // - + if (!gNoRender) { LLFastTimer t(FTM_WORLD_UPDATE); @@ -4087,26 +4115,38 @@ void LLAppViewer::idle() } stop_glerror(); - if (LLViewerJoystick::getInstance()->getOverrideCamera()) { - LLViewerJoystick::getInstance()->moveFlycam(); - } - else - { - if (LLToolMgr::getInstance()->inBuildMode()) + LAZY_FT("Move*"); + if (LLViewerJoystick::getInstance()->getOverrideCamera()) { - LLViewerJoystick::getInstance()->moveObjects(); + LLViewerJoystick::getInstance()->moveFlycam(); } + else + { + if (LLToolMgr::getInstance()->inBuildMode()) + { + LLViewerJoystick::getInstance()->moveObjects(); + } - gAgentCamera.updateCamera(); + gAgentCamera.updateCamera(); + } } // update media focus - LLViewerMediaFocus::getInstance()->update(); - + { + LAZY_FT("Media Focus"); + LLViewerMediaFocus::getInstance()->update(); + } + // Update marketplace - LLMarketplaceInventoryImporter::update(); - LLMarketplaceInventoryNotifications::update(); + { + LAZY_FT("MPII::update"); + LLMarketplaceInventoryImporter::update(); + } + { + LAZY_FT("MPIN::update"); + LLMarketplaceInventoryNotifications::update(); + } // objects and camera should be in sync, do LOD calculations now { @@ -4115,7 +4155,10 @@ void LLAppViewer::idle() } // Execute deferred tasks. - LLDeferredTaskList::instance().run(); + { + LAZY_FT("DeferredTaskRun"); + LLDeferredTaskList::instance().run(); + } // Handle shutdown process, for example, // wait for floaters to close, send quit message, diff --git a/indra/newview/llavataractions.cpp b/indra/newview/llavataractions.cpp index fae1b7c3d..2af9ee120 100644 --- a/indra/newview/llavataractions.cpp +++ b/indra/newview/llavataractions.cpp @@ -687,13 +687,18 @@ bool LLAvatarActions::canOfferTeleport(const uuid_vec_t& ids) void LLAvatarActions::inviteToGroup(const LLUUID& id) { - LLFloaterGroupPicker* widget = LLFloaterGroupPicker::showInstance(LLSD(id)); + inviteToGroup(uuid_vec_t(1, id)); +} + +void LLAvatarActions::inviteToGroup(const uuid_vec_t& ids) +{ + LLFloaterGroupPicker* widget = LLFloaterGroupPicker::showInstance(LLSD(ids.front())); if (widget) { widget->center(); widget->setPowersMask(GP_MEMBER_INVITE); widget->removeNoneOption(); - widget->setSelectGroupCallback(boost::bind(callback_invite_to_group, _1, id)); + widget->setSelectGroupCallback(boost::bind(callback_invite_to_group, _1, ids)); } } @@ -767,11 +772,8 @@ void ban_from_group(const uuid_vec_t& ids) // // static -void LLAvatarActions::callback_invite_to_group(LLUUID group_id, LLUUID id) +void LLAvatarActions::callback_invite_to_group(LLUUID group_id, uuid_vec_t& agent_ids) { - uuid_vec_t agent_ids; - agent_ids.push_back(id); - LLFloaterGroupInvite::showForGroup(group_id, &agent_ids); } diff --git a/indra/newview/llavataractions.h b/indra/newview/llavataractions.h index 3bb613185..5488c34c2 100644 --- a/indra/newview/llavataractions.h +++ b/indra/newview/llavataractions.h @@ -155,6 +155,7 @@ public: * Invite avatar to a group. */ static void inviteToGroup(const LLUUID& id); + static void inviteToGroup(const uuid_vec_t& ids); /** * Kick avatar off grid @@ -217,7 +218,7 @@ private: static bool handleKick(const LLSD& notification, const LLSD& response); static bool handleFreeze(const LLSD& notification, const LLSD& response); static bool handleUnfreeze(const LLSD& notification, const LLSD& response); - static void callback_invite_to_group(LLUUID group_id, LLUUID id); + static void callback_invite_to_group(LLUUID group_id, uuid_vec_t& ids); static void on_avatar_name_cache_teleport_request(const LLUUID& id, const LLAvatarName& av_name); public: diff --git a/indra/newview/llenvmanager.cpp b/indra/newview/llenvmanager.cpp index 3033d4e07..8f31c6c6f 100644 --- a/indra/newview/llenvmanager.cpp +++ b/indra/newview/llenvmanager.cpp @@ -105,9 +105,11 @@ void LLEnvPrefs::setUseDayCycle(const std::string& name) } //============================================================================= -LLEnvManagerNew::LLEnvManagerNew() +LLEnvManagerNew::LLEnvManagerNew(): + mInterpNextChangeMessage(true), + mCurRegionUUID(LLUUID::null), + mLastReceivedID(LLUUID::null) { - mInterpNextChangeMessage = true; // Set default environment settings. mUserPrefs.mUseRegionSettings = true; @@ -115,6 +117,9 @@ LLEnvManagerNew::LLEnvManagerNew() mUserPrefs.mWaterPresetName = "Default"; mUserPrefs.mSkyPresetName = "Default"; mUserPrefs.mDayCycleName = "Default"; + + LL_DEBUGS("Windlight")<getRegionID() : LLUUID::null; - if (region_uuid == mCurRegionUUID) + if (region_uuid != mCurRegionUUID) { - return; + // Clear locally modified region settings. + mNewRegionPrefs.clear(); + + // *TODO: clear environment settings of the previous region? + + // Request environment settings of the new region. + mCurRegionUUID = region_uuid; + // for region crossings, interpolate the change; for teleports, don't + mInterpNextChangeMessage = (gAgent.getTeleportState() == LLAgent::TELEPORT_NONE); + LL_DEBUGS("Windlight") << (mInterpNextChangeMessage ? "Crossed" : "Teleported") + << " to new region: " << region_uuid + << LL_ENDL; + requestRegionSettings(); + } + else + { + LL_DEBUGS("Windlight") << "disregarding region change; interp: " + << (mInterpNextChangeMessage ? "true" : "false") + << " regionp: " << regionp + << " old: " << mCurRegionUUID + << " new: " << region_uuid + << LL_ENDL; } - - // Clear locally modified region settings. - mNewRegionPrefs.clear(); - - // *TODO: clear environment settings of the previous region? - - // Request environment settings of the new region. - LL_DEBUGS("Windlight") << "New viewer region: " << region_uuid << LL_ENDL; - mCurRegionUUID = region_uuid; - mInterpNextChangeMessage = interpolate; - requestRegionSettings(); - - // Let interested parties know agent region has been changed. - mRegionChangeSignal(); } // Aurora-sim windlight refresh @@ -729,7 +731,7 @@ class WindLightRefresh : public LLHTTPNode llinfos << "Windlight Refresh, interpolate:" << env->mInterpNextChangeMessage << llendl; env->requestRegionSettings(); - env->mRegionChangeSignal(); + env->onRegionChange(); } }; diff --git a/indra/newview/llenvmanager.h b/indra/newview/llenvmanager.h index 8d5317996..6d7efeab6 100644 --- a/indra/newview/llenvmanager.h +++ b/indra/newview/llenvmanager.h @@ -2,31 +2,25 @@ * @file llenvmanager.h * @brief Declaration of classes managing WindLight and water settings. * - * $LicenseInfo:firstyear=2009&license=viewergpl$ - * - * Copyright (c) 2009, Linden Research, Inc. - * + * $LicenseInfo:firstyear=2009&license=viewerlgpl$ * Second Life Viewer Source Code - * The source code in this file ("Source Code") is provided by Linden Lab - * to you under the terms of the GNU General Public License, version 2.0 - * ("GPL"), unless you have obtained a separate licensing agreement - * ("Other License"), formally executed by you and Linden Lab. Terms of - * the GPL can be found in doc/GPL-license.txt in this distribution, or - * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2 + * Copyright (C) 2011, Linden Research, Inc. * - * There are special exceptions to the terms and conditions of the GPL as - * it is applied to this Source Code. View the full text of the exception - * in the file doc/FLOSS-exception.txt in this software distribution, or - * online at - * http://secondlifegrid.net/programs/open_source/licensing/flossexception + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; + * version 2.1 of the License only. * - * By copying, modifying or distributing this software, you acknowledge - * that you have read and understood your obligations described above, - * and agree to abide by those obligations. + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. * - * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO - * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY, - * COMPLETENESS OR PERFORMANCE. + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA * $/LicenseInfo$ */ @@ -39,7 +33,6 @@ class LLWLParamManager; class LLWaterParamManager; class LLWLAnimator; -class WindLightRefresh; // generic key struct LLEnvKey @@ -173,7 +166,6 @@ class LLEnvManagerNew : public LLSingleton public: typedef boost::signals2::signal prefs_change_signal_t; typedef boost::signals2::signal region_settings_change_signal_t; - typedef boost::signals2::signal region_change_signal_t; typedef boost::signals2::signal region_settings_applied_signal_t; LLEnvManagerNew(); @@ -229,15 +221,12 @@ public: bool sendRegionSettings(const LLEnvironmentSettings& new_settings); boost::signals2::connection setPreferencesChangeCallback(const prefs_change_signal_t::slot_type& cb); boost::signals2::connection setRegionSettingsChangeCallback(const region_settings_change_signal_t::slot_type& cb); - boost::signals2::connection setRegionChangeCallback(const region_change_signal_t::slot_type& cb); boost::signals2::connection setRegionSettingsAppliedCallback(const region_settings_applied_signal_t::slot_type& cb); static bool canEditRegionSettings(); /// @return true if we have access to editing region environment static const std::string getScopeString(LLEnvKey::EScope scope); // Public callbacks. - void onRegionCrossing(); - void onTeleport(); void onRegionSettingsResponse(const LLSD& content); void onRegionSettingsApplyResponse(bool ok); @@ -261,7 +250,7 @@ private: bool useDefaultSky(); bool useDefaultWater(); - void onRegionChange(bool interpolate); + void onRegionChange(); /// Emitted when user environment preferences change. prefs_change_signal_t mUsePrefsChangeSignal; @@ -269,9 +258,6 @@ private: /// Emitted when region environment settings update comes. region_settings_change_signal_t mRegionSettingsChangeSignal; - /// Emitted when agent region changes. Move to LLAgent? - region_change_signal_t mRegionChangeSignal; - /// Emitted when agent region changes. Move to LLAgent? region_settings_applied_signal_t mRegionSettingsAppliedSignal; diff --git a/indra/newview/llestateinfomodel.cpp b/indra/newview/llestateinfomodel.cpp index 09c05f3af..b15a1cced 100644 --- a/indra/newview/llestateinfomodel.cpp +++ b/indra/newview/llestateinfomodel.cpp @@ -38,9 +38,6 @@ #include "llfloaterregioninfo.h" // for invoice id #include "llviewerregion.h" -class AIHTTPTimeoutPolicy; -extern AIHTTPTimeoutPolicy estateChangeInfoResponder_timeout; - LLEstateInfoModel::LLEstateInfoModel() : mID(0) , mFlags(0) @@ -68,12 +65,12 @@ void LLEstateInfoModel::sendEstateInfo() } } -bool LLEstateInfoModel::getUseFixedSun() const { return mFlags & REGION_FLAGS_SUN_FIXED; } -bool LLEstateInfoModel::getIsExternallyVisible() const { return mFlags & REGION_FLAGS_EXTERNALLY_VISIBLE; } -bool LLEstateInfoModel::getAllowDirectTeleport() const { return mFlags & REGION_FLAGS_ALLOW_DIRECT_TELEPORT; } -bool LLEstateInfoModel::getDenyAnonymous() const { return mFlags & REGION_FLAGS_DENY_ANONYMOUS; } -bool LLEstateInfoModel::getDenyAgeUnverified() const { return mFlags & REGION_FLAGS_DENY_AGEUNVERIFIED; } -bool LLEstateInfoModel::getAllowVoiceChat() const { return mFlags & REGION_FLAGS_ALLOW_VOICE; } +bool LLEstateInfoModel::getUseFixedSun() const { return getFlag(REGION_FLAGS_SUN_FIXED); } +bool LLEstateInfoModel::getIsExternallyVisible() const { return getFlag(REGION_FLAGS_EXTERNALLY_VISIBLE); } +bool LLEstateInfoModel::getAllowDirectTeleport() const { return getFlag(REGION_FLAGS_ALLOW_DIRECT_TELEPORT); } +bool LLEstateInfoModel::getDenyAnonymous() const { return getFlag(REGION_FLAGS_DENY_ANONYMOUS); } +bool LLEstateInfoModel::getDenyAgeUnverified() const { return getFlag(REGION_FLAGS_DENY_AGEUNVERIFIED); } +bool LLEstateInfoModel::getAllowVoiceChat() const { return getFlag(REGION_FLAGS_ALLOW_VOICE); } void LLEstateInfoModel::setUseFixedSun(bool val) { setFlag(REGION_FLAGS_SUN_FIXED, val); } void LLEstateInfoModel::setIsExternallyVisible(bool val) { setFlag(REGION_FLAGS_EXTERNALLY_VISIBLE, val); } @@ -118,19 +115,18 @@ class LLEstateChangeInfoResponder : public LLHTTPClient::ResponderWithResult public: // if we get a normal response, handle it here - /*virtual*/ void httpSuccess(void) + virtual void httpSuccess() { llinfos << "Committed estate info" << llendl; LLEstateInfoModel::instance().notifyCommit(); } // if we get an error response - /*virtual*/ void httpFailure(void) + virtual void httpFailure() { - llwarns << "Failed to commit estate info (" << mStatus << "): " << mReason << llendl; + llwarns << "Failed to commit estate info [status:" << mStatus << "]: " << mReason << llendl; } - /*virtual*/ AIHTTPTimeoutPolicy const& getHTTPTimeoutPolicy(void) const { return estateChangeInfoResponder_timeout; } /*virtual*/ char const* getName(void) const { return "LLEstateChangeInfoResponder"; } }; @@ -205,18 +201,6 @@ void LLEstateInfoModel::commitEstateInfoDataserver() gAgent.sendMessage(); } -void LLEstateInfoModel::setFlag(U32 flag, bool val) -{ - if (val) - { - mFlags |= flag; - } - else - { - mFlags &= ~flag; - } -} - std::string LLEstateInfoModel::getInfoDump() { LLSD dump; diff --git a/indra/newview/llestateinfomodel.h b/indra/newview/llestateinfomodel.h index 30e83b140..b83d17f8d 100644 --- a/indra/newview/llestateinfomodel.h +++ b/indra/newview/llestateinfomodel.h @@ -86,19 +86,38 @@ protected: private: bool commitEstateInfoCaps(); void commitEstateInfoDataserver(); - U32 getFlags() const { return mFlags; } - void setFlag(U32 flag, bool val); + inline bool getFlag(U64 flag) const; + inline void setFlag(U64 flag, bool val); + U64 getFlags() const { return mFlags; } std::string getInfoDump(); // estate info std::string mName; /// estate name LLUUID mOwnerID; /// estate owner id U32 mID; /// estate id - U32 mFlags; /// estate flags + U64 mFlags; /// estate flags F32 mSunHour; /// estate sun hour update_signal_t mUpdateSignal; /// emitted when we receive update from sim update_signal_t mCommitSignal; /// emitted when our update gets applied to sim }; +inline bool LLEstateInfoModel::getFlag(U64 flag) const +{ + return ((mFlags & flag) != 0); +} + +inline void LLEstateInfoModel::setFlag(U64 flag, bool val) +{ + if (val) + { + mFlags |= flag; + } + else + { + mFlags &= ~flag; + } +} + + #endif // LL_LLESTATEINFOMODEL_H diff --git a/indra/newview/llface.cpp b/indra/newview/llface.cpp index 86b840c03..984aabf32 100644 --- a/indra/newview/llface.cpp +++ b/indra/newview/llface.cpp @@ -987,15 +987,15 @@ void LLFace::getPlanarProjectedParams(LLQuaternion* face_rot, LLVector3* face_po { const LLMatrix4a& vol_mat = getWorldMatrix(); const LLVolumeFace& vf = getViewerObject()->getVolume()->getVolumeFace(mTEOffset); - const LLVector4a& normal4a = vf.mNormals[0]; + const LLVector4a& normal = vf.mNormals[0]; const LLVector4a& tangent = vf.mTangents[0]; - LLVector4a binormal4a; - binormal4a.setCross3(normal4a, tangent); - binormal4a.mul(tangent.getF32ptr()[3]); + LLVector4a binormal; + binormal.setCross3(normal, tangent); + binormal.mul(tangent.getF32ptr()[3]); LLVector2 projected_binormal; - planarProjection(projected_binormal, normal4a, *vf.mCenter, binormal4a); + planarProjection(projected_binormal, normal, *vf.mCenter, binormal); projected_binormal -= LLVector2(0.5f, 0.5f); // this normally happens in xform() *scale = projected_binormal.length(); // rotate binormal to match what planarProjection() thinks it is, @@ -1004,19 +1004,15 @@ void LLFace::getPlanarProjectedParams(LLQuaternion* face_rot, LLVector3* face_po F32 ang = acos(projected_binormal.mV[VY]); ang = (projected_binormal.mV[VX] < 0.f) ? -ang : ang; - LLMatrix4a rot = gGL.genRot(ang, normal4a); - rot.rotate(binormal4a, binormal4a); + gGL.genRot(RAD_TO_DEG * ang, normal).rotate(binormal, binormal); LLVector4a x_axis; - x_axis.setCross3(binormal4a, normal4a); + x_axis.setCross3(binormal, normal); - LLQuaternion2 local_rot(LLQuaternion( LLVector3(x_axis.getF32ptr()), LLVector3(binormal4a.getF32ptr()), LLVector3(normal4a.getF32ptr()) )); + //VECTORIZE THIS + LLQuaternion local_rot(LLVector3(x_axis.getF32ptr()), LLVector3(binormal.getF32ptr()), LLVector3(normal.getF32ptr())); + *face_rot = local_rot * LLMatrix4(vol_mat.getF32ptr()).quaternion(); - LLMatrix4 vol_mat2(vol_mat.getF32ptr()); - - local_rot.mul(LLQuaternion2(vol_mat2.quaternion())); - - *face_rot = LLQuaternion(local_rot.getVector4a().getF32ptr()); face_pos->set(vol_mat.getRow().getF32ptr()); } diff --git a/indra/newview/llfloaterdirectory.cpp b/indra/newview/llfloaterdirectory.cpp index ce2f71e16..e6606de36 100644 --- a/indra/newview/llfloaterdirectory.cpp +++ b/indra/newview/llfloaterdirectory.cpp @@ -54,7 +54,6 @@ #include "hippogridmanager.h" #include "lfsimfeaturehandler.h" -#include "llenvmanager.h" #include "llnotificationsutil.h" #include "llviewerregion.h" @@ -279,7 +278,7 @@ LLFloaterDirectory::LLFloaterDirectory(const std::string& name) LLPanelDirMarket* marketp = static_cast(container->getPanelByName(market_panel)); container->removeTabPanel(marketp); // Until we get a MarketPlace URL, tab is removed. marketp->handleRegionChange(container); - LLEnvManagerNew::instance().setRegionChangeCallback(boost::bind(&LLPanelDirMarket::handleRegionChange, marketp, container)); + gAgent.addRegionChangedCallback(boost::bind(&LLPanelDirMarket::handleRegionChange, marketp, container)); } container->setCommitCallback(boost::bind(&LLFloaterDirectory::onTabChanged,_2)); } @@ -455,13 +454,13 @@ void LLFloaterDirectory::requestClassifieds() void LLFloaterDirectory::searchInAll(const std::string& search_text) { + start(); LLPanelDirFindAllInterface::search(sInstance->mFindAllPanel, search_text); performQueryOn2("classified_panel", search_text); performQueryOn2("events_panel", search_text); performQueryOn2("groups_panel", search_text); performQueryOn2("people_panel", search_text); performQueryOn2("places_panel", search_text); - sInstance->open(); } void LLFloaterDirectory::showFindAll(const std::string& search_text) @@ -583,7 +582,7 @@ void LLFloaterDirectory::focusCurrentPanel() } // static -void LLFloaterDirectory::showPanel(const std::string& tabname) +void LLFloaterDirectory::start() { // This function gets called when web browser clicks are processed, // so we don't delete the existing panel, which would delete the @@ -593,6 +592,12 @@ void LLFloaterDirectory::showPanel(const std::string& tabname) sInstance = new LLFloaterDirectory("directory"); } sInstance->open(); /*Flawfinder: ignore*/ +} + +// static +void LLFloaterDirectory::showPanel(const std::string& tabname) +{ + start(); sInstance->childShowTab("Directory Tabs", tabname); sInstance->focusCurrentPanel(); } diff --git a/indra/newview/llfloaterdirectory.h b/indra/newview/llfloaterdirectory.h index 0f5f1b501..c36ce412b 100644 --- a/indra/newview/llfloaterdirectory.h +++ b/indra/newview/llfloaterdirectory.h @@ -94,6 +94,7 @@ public: private: static void performQueryOn(const std::string& name, const std::string& search_text); static void performQueryOn2(const std::string& name, const std::string& search_text); + static void start(); static void showPanel(const std::string& tabname); /*virtual*/ void onClose(bool app_quitting); void focusCurrentPanel(); diff --git a/indra/newview/llfloatergroups.cpp b/indra/newview/llfloatergroups.cpp index 8cb6681ba..8be4611bf 100644 --- a/indra/newview/llfloatergroups.cpp +++ b/indra/newview/llfloatergroups.cpp @@ -185,7 +185,7 @@ LLPanelGroups::~LLPanelGroups() // clear the group list, and get a fresh set of info. void LLPanelGroups::reset() { - getChild("groupcount")->setTextArg("[COUNT]", llformat("%d",gAgent.mGroups.count())); + getChild("groupcount")->setTextArg("[COUNT]", llformat("%d",gAgent.mGroups.size())); getChild("groupcount")->setTextArg("[MAX]", llformat("%d", gHippoLimits->getMaxAgentGroups())); init_group_list(getChild("group list"), gAgent.getGroupID()); @@ -194,7 +194,7 @@ void LLPanelGroups::reset() BOOL LLPanelGroups::postBuild() { - getChild("groupcount")->setTextArg("[COUNT]", llformat("%d",gAgent.mGroups.count())); + getChild("groupcount")->setTextArg("[COUNT]", llformat("%d",gAgent.mGroups.size())); getChild("groupcount")->setTextArg("[MAX]", llformat("%d",gHippoLimits->getMaxAgentGroups())); LLScrollListCtrl *list = getChild("group list"); @@ -231,7 +231,7 @@ BOOL LLPanelGroups::postBuild() void LLPanelGroups::enableButtons() { - getChildView("Create")->setEnabled(gAgent.mGroups.count() < gHippoLimits->getMaxAgentGroups()); + getChildView("Create")->setEnabled(gAgent.canJoinGroups()); LLScrollListCtrl* group_list = getChild("group list"); if (!group_list) return; LLUUID group_id; @@ -368,7 +368,7 @@ LLSD create_group_element(const LLGroupData *group_datap, const LLUUID &active_g void init_group_list(LLScrollListCtrl* ctrl, const LLUUID& highlight_id, U64 powers_mask) { - S32 count = gAgent.mGroups.count(); + S32 count = gAgent.mGroups.size(); LLUUID id; LLCtrlListInterface *group_list = ctrl->getListInterface(); if (!group_list) return; @@ -381,7 +381,7 @@ void init_group_list(LLScrollListCtrl* ctrl, const LLUUID& highlight_id, U64 pow for(S32 i = 0; i < count; ++i) { - LLSD element = create_group_element(&gAgent.mGroups.get(i), highlight_id, powers_mask); + LLSD element = create_group_element(&gAgent.mGroups[i], highlight_id, powers_mask); if(element.size()) group_list->addElement(element, ADD_SORTED); } diff --git a/indra/newview/llfloaterland.cpp b/indra/newview/llfloaterland.cpp index 6c68e27d6..57e4c0f20 100644 --- a/indra/newview/llfloaterland.cpp +++ b/indra/newview/llfloaterland.cpp @@ -165,19 +165,39 @@ LLParcel* LLFloaterLand::getCurrentSelectedParcel() //static LLPanelLandObjects* LLFloaterLand::getCurrentPanelLandObjects() { - return LLFloaterLand::getInstance()->mPanelObjects; + LLFloaterLand* land_instance = LLFloaterLand::getInstance(); + if (land_instance) + { + return land_instance->mPanelObjects; + } + else + { + return NULL; + } } //static LLPanelLandCovenant* LLFloaterLand::getCurrentPanelLandCovenant() { - return LLFloaterLand::getInstance()->mPanelCovenant; + LLFloaterLand* land_instance = LLFloaterLand::getInstance(); + if (land_instance) + { + return land_instance->mPanelCovenant; + } + else + { + return NULL; + } } // static void LLFloaterLand::refreshAll() { - LLFloaterLand::getInstance()->refresh(); + LLFloaterLand* land_instance = LLFloaterLand::getInstance(); + if (land_instance) + { + land_instance->refresh(); + } } void LLFloaterLand::onOpen() @@ -257,7 +277,9 @@ LLFloaterLand::~LLFloaterLand() // public void LLFloaterLand::refresh() { - if (LLViewerParcelMgr::getInstance()->selectionEmpty()) + if (!instanceVisible()) + return; + if (LLViewerParcelMgr::getInstance()->selectionEmpty() && mParcel->getParcel() == NULL) LLViewerParcelMgr::getInstance()->selectParcelAt(gAgent.getPositionGlobal()); mPanelGeneral->refresh(); mPanelObjects->refresh(); @@ -761,6 +783,7 @@ void LLPanelLandGeneral::refresh() BOOL use_pass = parcel->getOwnerID()!= gAgent.getID() && parcel->getParcelFlag(PF_USE_PASS_LIST) && !LLViewerParcelMgr::getInstance()->isCollisionBanned();; mBtnBuyPass->setEnabled(use_pass); + } } @@ -855,11 +878,13 @@ void LLPanelLandGeneral::onClickProfile() if (parcel->getIsGroupOwned()) { - LLGroupActions::show(parcel->getGroupID()); + const LLUUID& group_id = parcel->getGroupID(); + LLGroupActions::show(group_id); } else { - LLAvatarActions::showProfile(parcel->getOwnerID()); + const LLUUID& avatar_id = parcel->getOwnerID(); + LLAvatarActions::showProfile(avatar_id); } } @@ -1536,7 +1561,7 @@ void LLPanelLandObjects::processParcelObjectOwnersReply(LLMessageSystem *msg, vo BOOL is_group_owned; S32 object_count; U32 most_recent_time = 0; - BOOL is_online = 0; + BOOL is_online; std::string object_count_str; //BOOL b_need_refresh = FALSE; @@ -1551,7 +1576,7 @@ void LLPanelLandObjects::processParcelObjectOwnersReply(LLMessageSystem *msg, vo std::vector avatar_ids; std::vector positions; LLWorld::instance().getAvatars(&avatar_ids, &positions, mypos, F32_MAX); - + for(S32 i = 0; i < rows; ++i) { msg->getUUIDFast(_PREHASH_Data, _PREHASH_OwnerID, owner_id, i); @@ -2832,11 +2857,12 @@ void LLPanelLandAccess::onCommitAny(LLUICtrl *ctrl, void *userdata) void LLPanelLandAccess::onClickAddAccess() { + LLFloater* root_floater = gFloaterView->getParentFloater(this); LLFloaterAvatarPicker* picker = LLFloaterAvatarPicker::show( boost::bind(&LLPanelLandAccess::callbackAvatarCBAccess, this, _1)); if (picker) { - gFloaterView->getParentFloater(this)->addDependentFloater(picker); + root_floater->addDependentFloater(picker); } } @@ -2880,11 +2906,12 @@ void LLPanelLandAccess::onClickRemoveAccess(void* data) void LLPanelLandAccess::onClickAddBanned() { + LLFloater* root_floater = gFloaterView->getParentFloater(this); LLFloaterAvatarPicker* picker = LLFloaterAvatarPicker::show( boost::bind(&LLPanelLandAccess::callbackAvatarCBBanned, this, _1)); if (picker) { - gFloaterView->getParentFloater(this)->addDependentFloater(picker); + root_floater->addDependentFloater(picker); } } @@ -3062,15 +3089,15 @@ void LLFloaterLand::open() // Ideally we could just use LLViewerParcelMgr::isParcelOwnedByAgent(), but that has that sneaky exemption // for fake god like (aka View Admin Options) const LLUUID& idOwner = pParcel->getOwnerID(); - if ( (idOwner != gAgent.getID()) ) + if (idOwner != gAgentID) { // *sighs* LLAgent::hasPowerInGroup() has it too so copy/paste from there - S32 count = gAgent.mGroups.count(); bool fShow = false; + S32 count = gAgent.mGroups.size(); bool fShow = false; for (S32 i = 0; i < count; ++i) { - if (gAgent.mGroups.get(i).mID == idOwner) + if (gAgent.mGroups[i].mID == idOwner) { - fShow |= ((gAgent.mGroups.get(i).mPowers & GP_LAND_RETURN) > 0); + fShow |= ((gAgent.mGroups[i].mPowers & GP_LAND_RETURN) > 0); break; } } diff --git a/indra/newview/llfloaterlandholdings.cpp b/indra/newview/llfloaterlandholdings.cpp index 405983590..b672cbe91 100644 --- a/indra/newview/llfloaterlandholdings.cpp +++ b/indra/newview/llfloaterlandholdings.cpp @@ -100,27 +100,26 @@ BOOL LLFloaterLandHoldings::postBuild() childSetAction("Teleport", onClickTeleport, this); childSetAction("Show on Map", onClickMap, this); - LLScrollListCtrl *grant_list = getChild("grant list"); - // Grant list + LLScrollListCtrl *grant_list = getChild("grant list"); grant_list->setDoubleClickCallback(boost::bind(LLGroupActions::show, boost::bind(&LLScrollListCtrl::getCurrentID, grant_list))); LLCtrlListInterface *list = grant_list->getListInterface(); if (!list) return TRUE; - S32 count = gAgent.mGroups.count(); + S32 count = gAgent.mGroups.size(); for(S32 i = 0; i < count; ++i) { - LLUUID id(gAgent.mGroups.get(i).mID); + LLUUID id(gAgent.mGroups.at(i).mID); LLSD element; element["id"] = id; element["columns"][0]["column"] = "group"; - element["columns"][0]["value"] = gAgent.mGroups.get(i).mName; + element["columns"][0]["value"] = gAgent.mGroups.at(i).mName; element["columns"][0]["font"] = "SANSSERIF"; LLUIString areastr = getString("area_string"); - areastr.setArg("[AREA]", llformat("%d", gAgent.mGroups.get(i).mContribution)); + areastr.setArg("[AREA]", llformat("%d", gAgent.mGroups.at(i).mContribution)); element["columns"][1]["column"] = "area"; element["columns"][1]["value"] = areastr; element["columns"][1]["font"] = "SANSSERIF"; @@ -128,6 +127,8 @@ BOOL LLFloaterLandHoldings::postBuild() list->addElement(element, ADD_SORTED); } + center(); + return TRUE; } @@ -157,8 +158,8 @@ void LLFloaterLandHoldings::refresh() enable_btns = TRUE; } - childSetEnabled("Teleport", enable_btns); - childSetEnabled("Show on Map", enable_btns); + getChildView("Teleport")->setEnabled(enable_btns); + getChildView("Show on Map")->setEnabled(enable_btns); refreshAggregates(); } @@ -291,15 +292,16 @@ void LLFloaterLandHoldings::buttonCore(S32 which) F64 global_z = gAgent.getPositionGlobal().mdV[VZ]; LLVector3d pos_global(global_x, global_y, global_z); + LLFloaterWorldMap* floater_world_map = gFloaterWorldMap; switch(which) { case 0: gAgent.teleportViaLocation(pos_global); - gFloaterWorldMap->trackLocation(pos_global); + if(floater_world_map) floater_world_map->trackLocation(pos_global); break; case 1: - gFloaterWorldMap->trackLocation(pos_global); + if(floater_world_map) floater_world_map->trackLocation(pos_global); LLFloaterWorldMap::show(true); break; default: @@ -329,7 +331,7 @@ void LLFloaterLandHoldings::refreshAggregates() S32 current_area = gStatusBar->getSquareMetersCommitted(); S32 available_area = gStatusBar->getSquareMetersLeft(); - childSetTextArg("allowed_text", "[AREA]", llformat("%d",allowed_area)); - childSetTextArg("current_text", "[AREA]", llformat("%d",current_area)); - childSetTextArg("available_text", "[AREA]", llformat("%d",available_area)); + getChild("allowed_text")->setTextArg("[AREA]", llformat("%d",allowed_area)); + getChild("current_text")->setTextArg("[AREA]", llformat("%d",current_area)); + getChild("available_text")->setTextArg("[AREA]", llformat("%d",available_area)); } diff --git a/indra/newview/llfloaterpathfindingobjects.cpp b/indra/newview/llfloaterpathfindingobjects.cpp index 7fe3311cb..f8c170063 100644 --- a/indra/newview/llfloaterpathfindingobjects.cpp +++ b/indra/newview/llfloaterpathfindingobjects.cpp @@ -41,7 +41,6 @@ #include "llavatarnamecache.h" #include "llbutton.h" #include "llcheckboxctrl.h" -#include "llenvmanager.h" #include "llfloater.h" #include "llfontgl.h" #include "llnotifications.h" @@ -84,7 +83,7 @@ void LLFloaterPathfindingObjects::onOpen(/*const LLSD &pKey*/) if (!mRegionBoundaryCrossingSlot.connected()) { - mRegionBoundaryCrossingSlot = LLEnvManagerNew::getInstance()->setRegionChangeCallback(boost::bind(&LLFloaterPathfindingObjects::onRegionBoundaryCrossed, this)); + mRegionBoundaryCrossingSlot = gAgent.addRegionChangedCallback(boost::bind(&LLFloaterPathfindingObjects::onRegionBoundaryCrossed, this)); } if (!mGodLevelChangeSlot.connected()) @@ -384,19 +383,31 @@ void LLFloaterPathfindingObjects::buildObjectsScrollList(const LLPathfindingObje void LLFloaterPathfindingObjects::addObjectToScrollList(const LLPathfindingObjectPtr pObjectPtr, const LLSD &pScrollListItemData) { - LLSD rowParams; - rowParams["id"] = pObjectPtr->getUUID(); + LLScrollListCell::Params cellParams; + //cellParams.font = LLFontGL::getFontSansSerif(); + + LLScrollListItem::Params rowParams; + rowParams.value = pObjectPtr->getUUID().asString(); llassert(pScrollListItemData.isArray()); - S32 idx = 0; for (LLSD::array_const_iterator cellIter = pScrollListItemData.beginArray(); cellIter != pScrollListItemData.endArray(); ++cellIter) { - rowParams["columns"][idx] = *cellIter; - idx++; + const LLSD &cellElement = *cellIter; + + llassert(cellElement.has("column")); + llassert(cellElement.get("column").isString()); + cellParams.column = cellElement.get("column").asString(); + + llassert(cellElement.has("value")); + llassert(cellElement.get("value").isString()); + cellParams.value = cellElement.get("value").asString(); + + rowParams.columns.add(cellParams); } - LLScrollListItem *scrollListItem = mObjectsScrollList->addElement(rowParams); + LLScrollListItem *scrollListItem = mObjectsScrollList->addRow(rowParams); + if (pObjectPtr->hasOwner() && !pObjectPtr->hasOwnerName()) { mMissingNameObjectsScrollListItems.insert(std::make_pair(pObjectPtr->getUUID().asString(), scrollListItem)); diff --git a/indra/newview/llfloaterregiondebugconsole.cpp b/indra/newview/llfloaterregiondebugconsole.cpp index 39404fa20..31699d9ea 100644 --- a/indra/newview/llfloaterregiondebugconsole.cpp +++ b/indra/newview/llfloaterregiondebugconsole.cpp @@ -37,10 +37,6 @@ #include "llviewerregion.h" #include "lluictrlfactory.h" -class AIHTTPTimeoutPolicy; -extern AIHTTPTimeoutPolicy asyncConsoleResponder_timeout; -extern AIHTTPTimeoutPolicy consoleResponder_timeout; - // Two versions of the sim console API are supported. // // SimConsole capability (deprecated): @@ -81,7 +77,6 @@ namespace { public: /*virtual*/ void httpFailure(void) { sConsoleReplySignal(UNABLE_TO_SEND_COMMAND); } - /*virtual*/ AIHTTPTimeoutPolicy const& getHTTPTimeoutPolicy(void) const { return asyncConsoleResponder_timeout; } /*virtual*/ char const* getName(void) const { return "AsyncConsoleResponder"; } }; @@ -111,7 +106,6 @@ namespace } } - /*virtual*/ AIHTTPTimeoutPolicy const& getHTTPTimeoutPolicy(void) const { return consoleResponder_timeout; } /*virtual*/ char const* getName(void) const { return "ConsoleResponder"; } LLTextEditor * mOutput; diff --git a/indra/newview/llfloaterregioninfo.cpp b/indra/newview/llfloaterregioninfo.cpp index 7df8e5272..23db2f4e8 100644 --- a/indra/newview/llfloaterregioninfo.cpp +++ b/indra/newview/llfloaterregioninfo.cpp @@ -61,6 +61,7 @@ #include "llfloatergodtools.h" // for send_sim_wide_deletes() #include "llfloatertopobjects.h" // added to fix SL-32336 #include "llfloatergroups.h" +#include "llfloaterregiondebugconsole.h" #include "llfloatertelehub.h" #include "llinventorymodel.h" #include "lllineeditor.h" @@ -94,9 +95,6 @@ const S32 TERRAIN_TEXTURE_COUNT = 4; const S32 CORNER_COUNT = 4; -class AIHTTPTimeoutPolicy; -extern AIHTTPTimeoutPolicy estateChangeInfoResponder_timeout; - ///---------------------------------------------------------------------------- /// Local class declaration ///---------------------------------------------------------------------------- @@ -252,7 +250,7 @@ BOOL LLFloaterRegionInfo::postBuild() &processEstateOwnerRequest); // Request region info when agent region changes. - LLEnvManagerNew::instance().setRegionChangeCallback(boost::bind(&LLFloaterRegionInfo::requestRegionInfo, this)); + gAgent.addRegionChangedCallback(boost::bind(&LLFloaterRegionInfo::requestRegionInfo, this)); return TRUE; } @@ -269,6 +267,7 @@ void LLFloaterRegionInfo::onOpen() refreshFromRegion(gAgent.getRegion()); requestRegionInfo(); + requestMeshRezInfo(); LLFloater::onOpen(); } @@ -650,9 +649,10 @@ void LLPanelRegionInfo::initCtrl(const std::string& name) getChild(name)->setCommitCallback(boost::bind(&LLPanelRegionInfo::onChangeAnything, this)); } +// Singu TODO: Make this a callback registrar function instead. void LLPanelRegionInfo::initHelpBtn(const std::string& name, const std::string& xml_alert) { - childSetAction(name, boost::bind(&LLPanelRegionInfo::onClickHelp, this, xml_alert)); + getChild(name)->setCommitCallback(boost::bind(&LLPanelRegionInfo::onClickHelp, this, xml_alert)); } void LLPanelRegionInfo::onClickHelp(const std::string& xml_alert) @@ -857,6 +857,46 @@ bool LLPanelRegionGeneralInfo::onMessageCommit(const LLSD& notification, const L return false; } +class ConsoleRequestResponder : public LLHTTPClient::ResponderIgnoreBody +{ + LOG_CLASS(ConsoleRequestResponder); +protected: + /*virtual*/ + void httpFailure() + { + llwarns << "error requesting mesh_rez_enabled " << dumpResponse() << llendl; + } + /*virtual*/ const char* getName() const { return "ConsoleRequestResponder"; } +}; + + +// called if this request times out. +class ConsoleUpdateResponder : public LLHTTPClient::ResponderIgnoreBody +{ + LOG_CLASS(ConsoleUpdateResponder); +protected: + /* virtual */ + void httpFailure() + { + llwarns << "error updating mesh enabled region setting " << dumpResponse() << llendl; + } +}; + +void LLFloaterRegionInfo::requestMeshRezInfo() +{ + std::string sim_console_url = gAgent.getRegion()->getCapability("SimConsoleAsync"); + + if (!sim_console_url.empty()) + { + std::string request_str = "get mesh_rez_enabled"; + + LLHTTPClient::post( + sim_console_url, + LLSD(request_str), + new ConsoleRequestResponder); + } +} + // setregioninfo // strings[0] = 'Y' - block terraform, 'N' - not // strings[1] = 'Y' - block fly, 'N' - not @@ -969,6 +1009,7 @@ BOOL LLPanelRegionDebugInfo::postBuild() childSetAction("top_scripts_btn", onClickTopScripts, this); childSetAction("restart_btn", onClickRestart, this); childSetAction("cancel_restart_btn", onClickCancelRestart, this); + childSetAction("region_debug_console_btn", onClickDebugConsole, this); return TRUE; } @@ -990,6 +1031,7 @@ bool LLPanelRegionDebugInfo::refreshFromRegion(LLViewerRegion* region) getChildView("top_scripts_btn")->setEnabled(allow_modify); getChildView("restart_btn")->setEnabled(allow_modify); getChildView("cancel_restart_btn")->setEnabled(allow_modify); + getChildView("region_debug_console_btn")->setEnabled(allow_modify); return LLPanelRegionInfo::refreshFromRegion(region); } @@ -1145,6 +1187,11 @@ void LLPanelRegionDebugInfo::onClickCancelRestart(void* data) self->sendEstateOwnerMessage(gMessageSystem, "restart", invoice, strings); } +// static +void LLPanelRegionDebugInfo::onClickDebugConsole(void* data) +{ + LLFloaterRegionDebugConsole::getInstance()->open(); +} BOOL LLPanelRegionTerrainInfo::validateTextureSizes() { @@ -1162,7 +1209,7 @@ BOOL LLPanelRegionTerrainInfo::validateTextureSizes() S32 width = img->getFullWidth(); S32 height = img->getFullHeight(); - //llinfos << "texture detail " << i << " is " << width << "x" << height << "x" << components << llendl; + //LL_INFOS() << "texture detail " << i << " is " << width << "x" << height << "x" << components << LL_ENDL; if (components != 3) { @@ -1173,7 +1220,7 @@ BOOL LLPanelRegionTerrainInfo::validateTextureSizes() return FALSE; } - if (width > 1024 || height > 1024) + if (width > 1024 || height > 1024) // { LLSD args; @@ -1590,7 +1637,7 @@ void LLPanelEstateInfo::onClickKickUser() void LLPanelEstateInfo::onKickUserCommit(const uuid_vec_t& ids, const std::vector& names) { if (names.empty() || ids.empty()) return; - + //check to make sure there is one valid user and id if( ids[0].isNull() ) { @@ -1794,7 +1841,7 @@ void LLPanelEstateInfo::accessAddCore3(const uuid_vec_t& ids, LLEstateAccessChan LLSD args; args["NUM_ADDED"] = llformat("%d",ids.size()); args["MAX_AGENTS"] = llformat("%d",ESTATE_MAX_ACCESS_IDS); - args["LIST_TYPE"] = "Allowed Residents"; + args["LIST_TYPE"] = LLTrans::getString("RegionInfoListTypeAllowedAgents"); args["NUM_EXCESS"] = llformat("%d",(ids.size()+currentCount)-ESTATE_MAX_ACCESS_IDS); LLNotificationsUtil::add("MaxAgentOnRegionBatch", args); delete change_info; @@ -1810,7 +1857,7 @@ void LLPanelEstateInfo::accessAddCore3(const uuid_vec_t& ids, LLEstateAccessChan LLSD args; args["NUM_ADDED"] = llformat("%d",ids.size()); args["MAX_AGENTS"] = llformat("%d",ESTATE_MAX_ACCESS_IDS); - args["LIST_TYPE"] = "Banned Residents"; + args["LIST_TYPE"] = LLTrans::getString("RegionInfoListTypeBannedAgents"); args["NUM_EXCESS"] = llformat("%d",(ids.size()+currentCount)-ESTATE_MAX_ACCESS_IDS); LLNotificationsUtil::add("MaxAgentOnRegionBatch", args); delete change_info; @@ -2337,16 +2384,18 @@ void LLPanelEstateInfo::getEstateOwner() class LLEstateChangeInfoResponder : public LLHTTPClient::ResponderWithResult { + LOG_CLASS(LLEstateChangeInfoResponder); public: LLEstateChangeInfoResponder(LLPanelEstateInfo* panel) { mpPanel = panel->getHandle(); } +protected: // if we get a normal response, handle it here - /*virtual*/ void httpSuccess(void) + virtual void httpSuccess() { - LL_INFOS("Windlight") << "Successfully committed estate info" << llendl; + LL_INFOS("Windlight") << "Successfully committed estate info" << LL_ENDL; // refresh the panel from the database LLPanelEstateInfo* panel = dynamic_cast(mpPanel.get()); @@ -2355,13 +2404,11 @@ public: } // if we get an error response - /*virtual*/ void httpFailure(void) + virtual void httpFailure() { - llinfos << "LLEstateChangeInfoResponder::error [status:" - << mStatus << "]: " << mReason << llendl; + LL_WARNS("Windlight") << dumpResponse() << LL_ENDL; } - /*virtual*/ AIHTTPTimeoutPolicy const& getHTTPTimeoutPolicy(void) const { return estateChangeInfoResponder_timeout; } /*virtual*/ char const* getName(void) const { return "LLEstateChangeInfoResponder"; } private: @@ -2931,9 +2978,10 @@ bool LLDispatchSetEstateAccess::operator()( } - std::string msg = llformat("Banned residents: (%d, max %d)", - totalBannedAgents, - ESTATE_MAX_ACCESS_IDS); + LLStringUtil::format_map_t args; + args["[BANNEDAGENTS]"] = llformat("%d", totalBannedAgents); + args["[MAXBANNED]"] = llformat("%d", ESTATE_MAX_ACCESS_IDS); + std::string msg = LLTrans::getString("RegionInfoBannedResidents", args); panel->getChild("ban_resident_label")->setValue(LLSD(msg)); if (banned_agent_name_list) @@ -2953,9 +3001,10 @@ bool LLDispatchSetEstateAccess::operator()( if (access_flags & ESTATE_ACCESS_MANAGERS) { - std::string msg = llformat("Estate Managers: (%d, max %d)", - num_estate_managers, - ESTATE_MAX_MANAGERS); + LLStringUtil::format_map_t args; + args["[ESTATEMANAGERS]"] = llformat("%d", num_estate_managers); + args["[MAXMANAGERS]"] = llformat("%d", ESTATE_MAX_MANAGERS); + std::string msg = LLTrans::getString("RegionInfoEstateManagers", args); panel->getChild("estate_manager_label")->setValue(LLSD(msg)); LLNameListCtrl* estate_manager_name_list = @@ -3586,12 +3635,9 @@ void LLFloaterRegionInfo::open() // We'll allow access to the estate tools for estate managers (and for the sim owner) if (gRlvHandler.hasBehaviour(RLV_BHVR_SHOWLOC)) { - LLViewerRegion* pRegion = gAgent.getRegion(); - if (!pRegion) - return; - + const LLViewerRegion* region(gAgent.getRegion()); // Should be able to call LLRegion::canManageEstate() but then we can fake god like - if ( (!pRegion->isEstateManager()) && (pRegion->getOwner() != gAgent.getID()) ) + if (!(region && region->isEstateManager() && region->getOwner() == gAgentID)) return; } diff --git a/indra/newview/llfloaterregioninfo.h b/indra/newview/llfloaterregioninfo.h index 00c672b9d..128deaebe 100644 --- a/indra/newview/llfloaterregioninfo.h +++ b/indra/newview/llfloaterregioninfo.h @@ -95,11 +95,15 @@ public: virtual void refresh(); void requestRegionInfo(); + void requestMeshRezInfo(); + +private: protected: LLFloaterRegionInfo(const LLSD& seed); ~LLFloaterRegionInfo(); +protected: void onTabSelected(const LLSD& param); void refreshFromRegion(LLViewerRegion* region); @@ -211,6 +215,7 @@ protected: static void onClickRestart(void* data); bool callbackRestart(const LLSD& notification, const LLSD& response); static void onClickCancelRestart(void* data); + static void onClickDebugConsole(void* data); private: LLUUID mTargetAvatar; @@ -229,6 +234,7 @@ public: virtual BOOL postBuild(); // LLPanel virtual bool refreshFromRegion(LLViewerRegion* region); // refresh local settings from region update from simulator + void setEnvControls(bool available); // Whether environment settings are available for this region BOOL validateTextureSizes(); diff --git a/indra/newview/llfloaterregionrestarting.cpp b/indra/newview/llfloaterregionrestarting.cpp index a5eeeeecc..98406389b 100644 --- a/indra/newview/llfloaterregionrestarting.cpp +++ b/indra/newview/llfloaterregionrestarting.cpp @@ -31,7 +31,6 @@ #include "lluictrlfactory.h" #include "llagent.h" #include "llagentcamera.h" -#include "llenvmanager.h" #include "llviewercontrol.h" #include "llviewerwindow.h" @@ -103,31 +102,49 @@ LLFloaterRegionRestarting::LLFloaterRegionRestarting(const LLSD& key) : { //buildFromFile("floater_region_restarting.xml"); LLUICtrlFactory::getInstance()->buildFloater(this, "floater_region_restarting.xml"); - - LLStringUtil::format_map_t args; - args["[NAME]"] = key["NAME"].asString(); - getChild("region_name")->setValue(getString("RegionName", args)); - mRestartSeconds = getChild("restart_seconds"); + mName = key["NAME"].asString(); // center(); - refresh(); - - mRegionChangedConnection = LLEnvManagerNew::instance().setRegionChangeCallback(boost::bind(&LLFloaterRegionRestarting::close, this, false)); - if (mSeconds <= 20) emergency_teleport(); // For emergency teleports } LLFloaterRegionRestarting::~LLFloaterRegionRestarting() { + if (sShakeState != SHAKE_DONE && sShakeState != SHAKE_START) // Finish shake if needed + { + gAgentCamera.resetView(TRUE, TRUE); + sShakeState = SHAKE_DONE; + } mRegionChangedConnection.disconnect(); } BOOL LLFloaterRegionRestarting::postBuild() { + mRegionChangedConnection = gAgent.addRegionChangedCallback(boost::bind(&LLFloaterRegionRestarting::regionChange, this)); + if (mSeconds <= 20) emergency_teleport(); // For emergency teleports + + LLStringUtil::format_map_t args; + std::string text; + + args["[NAME]"] = mName; + text = getString("RegionName", args); + LLTextBox* textbox = getChild("region_name"); + textbox->setValue(text); + + mRestartSeconds = getChild("restart_seconds"); + setBackgroundColor(gColors.getColor("NotifyCautionBoxColor")); sShakeState = SHAKE_START; + + refresh(); + return TRUE; } +void LLFloaterRegionRestarting::regionChange() +{ + close(); +} + BOOL LLFloaterRegionRestarting::tick() { refresh(); @@ -150,9 +167,9 @@ void LLFloaterRegionRestarting::draw() { LLFloater::draw(); - static const LLCachedControl alchemyRegionShake(gSavedSettings, "AlchemyRegionRestartShake", true); - if (!alchemyRegionShake || isMinimized()) // If we're minimized, leave the user alone - return; + static const LLCachedControl alchemyRegionShake(gSavedSettings, "AlchemyRegionRestartShake", true); + if (!alchemyRegionShake || isMinimized()) // If we're minimized, leave the user alone + return; const F32 SHAKE_INTERVAL = 0.025f; const F32 SHAKE_TOTAL_DURATION = 1.8f; // the length of the default alert tone for this @@ -213,16 +230,6 @@ void LLFloaterRegionRestarting::draw() } } -void LLFloaterRegionRestarting::onClose(bool app_quitting) -{ - if (sShakeState != SHAKE_DONE && sShakeState != SHAKE_START) // Finish shake if needed - { - gAgentCamera.resetView(TRUE, TRUE); - sShakeState = SHAKE_DONE; - } - LLFloater::onClose(app_quitting); -} - void LLFloaterRegionRestarting::updateTime(const U32& time) { mSeconds = time; diff --git a/indra/newview/llfloaterregionrestarting.h b/indra/newview/llfloaterregionrestarting.h index ee7cb1d30..663fe3809 100644 --- a/indra/newview/llfloaterregionrestarting.h +++ b/indra/newview/llfloaterregionrestarting.h @@ -45,10 +45,11 @@ private: virtual BOOL tick(); virtual void refresh(); virtual void draw(); - virtual void onClose(bool app_quitting); + virtual void regionChange(); class LLTextBox* mRestartSeconds; U32 mSeconds; + std::string mName; U32 mShakeIterations; F32 mShakeMagnitude; LLTimer mShakeTimer; diff --git a/indra/newview/llgiveinventory.cpp b/indra/newview/llgiveinventory.cpp index 25885e68f..8cdcf5589 100644 --- a/indra/newview/llgiveinventory.cpp +++ b/indra/newview/llgiveinventory.cpp @@ -128,36 +128,31 @@ bool LLGiveInventory::isInventoryGiveAcceptable(const LLInventoryItem* item) { return false; } - - + bool acceptable = true; switch(item->getType()) { - case LLAssetType::AT_CALLINGCARD: - acceptable = false; - break; case LLAssetType::AT_OBJECT: - // - /*if(my_avatar->isWearingAttachment(item->getUUID())) + /* + if (get_is_item_worn(item->getUUID())) { acceptable = false; - }*/ - // + } + */ break; case LLAssetType::AT_BODYPART: case LLAssetType::AT_CLOTHING: { // /*bool copyable = false; - if(item->getPermissions().allowCopyBy(gAgent.getID())) copyable = true; + if(item->getPermissions().allowCopyBy(gAgentID)) copyable = true; - if(!copyable && gAgentWearables.isWearingItem(item->getUUID())) + if (!copyable || get_is_item_worn(item->getUUID())) { acceptable = false; }*/ // } - break; default: break; @@ -185,20 +180,16 @@ bool LLGiveInventory::isInventoryGroupGiveAcceptable(const LLInventoryItem* item bool acceptable = true; - switch(item->getType()) { - case LLAssetType::AT_CALLINGCARD: - acceptable = false; - break; - // - /*case LLAssetType::AT_OBJECT: + case LLAssetType::AT_OBJECT: + /* if(gAgentAvatarp->isWearingAttachment(item->getUUID())) { acceptable = false; - }* - break;*/ - // + } + */ + break; default: break; } @@ -245,11 +236,17 @@ void LLGiveInventory::doGiveInventoryCategory(const LLUUID& to_agent, const LLUUID& im_session_id) { - if (!cat) return; + if (!cat) + { + return; + } llinfos << "LLGiveInventory::giveInventoryCategory() - " << cat->getUUID() << llendl; - if (!isAgentAvatarValid()) return; + if (!isAgentAvatarValid()) + { + return; + } // Test out how many items are being given. LLViewerInventoryCategory::cat_array_t cats; @@ -275,17 +272,17 @@ void LLGiveInventory::doGiveInventoryCategory(const LLUUID& to_agent, LLNotificationsUtil::add("IncompleteInventory"); return; } - count = items.count() + cats.count(); - if(count > MAX_ITEMS) - { + count = items.count() + cats.count(); + if(count > MAX_ITEMS) + { LLNotificationsUtil::add("TooManyItems"); - return; - } - else if(count == 0) - { + return; + } + else if(count == 0) + { LLNotificationsUtil::add("NoItems"); - return; - } + return; + } else { if(0 == giveable.countNoCopy()) @@ -358,6 +355,7 @@ bool LLGiveInventory::handleCopyProtectedItem(const LLSD& notification, const LL S32 option = LLNotificationsUtil::getSelectedOption(notification, response); LLSD itmes = notification["payload"]["items"]; LLInventoryItem* item = NULL; + bool give_successful = true; switch(option) { case 0: // "Yes" @@ -376,15 +374,17 @@ bool LLGiveInventory::handleCopyProtectedItem(const LLSD& notification, const LL else { LLNotificationsUtil::add("CannotGiveItem"); + give_successful = false; } } break; default: // no, cancel, whatever, who cares, not yes. LLNotificationsUtil::add("TransactionCancelled"); + give_successful = false; break; } - return false; + return give_successful; } // static @@ -419,6 +419,7 @@ void LLGiveInventory::commitGiveInventoryItem(const LLUUID& to_agent, bucket, BUCKET_SIZE); gAgent.sendReliableMessage(); + // if (gSavedSettings.getBOOL("BroadcastViewerEffects")) { @@ -486,7 +487,10 @@ void LLGiveInventory::commitGiveInventoryCategory(const LLUUID& to_agent, const LLUUID& im_session_id) { -if(!cat) return; + if(!cat) + { + return; + } llinfos << "LLGiveInventory::commitGiveInventoryCategory() - " << cat->getUUID() << llendl; @@ -565,6 +569,7 @@ if(!cat) return; bucket_size); gAgent.sendReliableMessage(); delete[] bucket; + // if (gSavedSettings.getBOOL("BroadcastViewerEffects")) { @@ -585,4 +590,5 @@ if(!cat) return; logInventoryOffer(to_agent, im_session_id); } } + // EOF diff --git a/indra/newview/llgroupactions.cpp b/indra/newview/llgroupactions.cpp index c93dbaa9d..7d6710b5a 100644 --- a/indra/newview/llgroupactions.cpp +++ b/indra/newview/llgroupactions.cpp @@ -40,7 +40,6 @@ #include "llpanelgroup.h" #include "llviewermessage.h" #include "groupchatlistener.h" -#include "hippolimits.h" // for getMaxAgentGroups // [RLVa:KB] - Checked: 2011-03-28 (RLVa-1.3.0) #include "llslurl.h" #include "rlvactions.h" @@ -239,7 +238,7 @@ void LLGroupActions::startCall(const LLUUID& group_id) // static void LLGroupActions::join(const LLUUID& group_id) { - if (gAgent.mGroups.count() >= gHippoLimits->getMaxAgentGroups()) //!gAgent.canJoinGroups() + if (!gAgent.canJoinGroups()) { LLNotificationsUtil::add("JoinedTooManyGroups"); return; diff --git a/indra/newview/llmediafilter.cpp b/indra/newview/llmediafilter.cpp index 56d01e422..528dfc86f 100644 --- a/indra/newview/llmediafilter.cpp +++ b/indra/newview/llmediafilter.cpp @@ -101,7 +101,6 @@ void LLMediaFilter::filterAudioUrl(const std::string& url) { if (url.empty()) { - gAudiop->startInternetStream(url); return; } if (url == mCurrentAudioURL) return; diff --git a/indra/newview/llmenuoptionpathfindingrebakenavmesh.cpp b/indra/newview/llmenuoptionpathfindingrebakenavmesh.cpp index 0dea26fb7..4b08cae72 100644 --- a/indra/newview/llmenuoptionpathfindingrebakenavmesh.cpp +++ b/indra/newview/llmenuoptionpathfindingrebakenavmesh.cpp @@ -54,6 +54,8 @@ LLMenuOptionPathfindingRebakeNavmesh::LLMenuOptionPathfindingRebakeNavmesh() LLMenuOptionPathfindingRebakeNavmesh::~LLMenuOptionPathfindingRebakeNavmesh() { + if (mIsInitialized) + { if (mRebakeNavMeshMode == kRebakeNavMesh_RequestSent) { LL_WARNS("navmeshRebaking") << "During destruction of the LLMenuOptionPathfindingRebakeNavmesh " @@ -61,9 +63,6 @@ LLMenuOptionPathfindingRebakeNavmesh::~LLMenuOptionPathfindingRebakeNavmesh() << "to be received. This could contribute to a crash on exit." << LL_ENDL; } - llassert(!mIsInitialized); - if (mIsInitialized) - { quit(); } } @@ -80,7 +79,7 @@ void LLMenuOptionPathfindingRebakeNavmesh::initialize() if ( !mRegionCrossingSlot.connected() ) { - mRegionCrossingSlot = LLEnvManagerNew::getInstance()->setRegionChangeCallback(boost::bind(&LLMenuOptionPathfindingRebakeNavmesh::handleRegionBoundaryCrossed, this)); + mRegionCrossingSlot = gAgent.addRegionChangedCallback(boost::bind(&LLMenuOptionPathfindingRebakeNavmesh::handleRegionBoundaryCrossed, this)); } if (!mAgentStateSlot.connected()) @@ -93,8 +92,7 @@ void LLMenuOptionPathfindingRebakeNavmesh::initialize() void LLMenuOptionPathfindingRebakeNavmesh::quit() { - llassert(mIsInitialized); - if (mIsInitialized) + if (mIsInitialized) // Quitting from the login screen leaves this uninitialized { if (mNavMeshSlot.connected()) { @@ -174,51 +172,60 @@ void LLMenuOptionPathfindingRebakeNavmesh::handleAgentState(BOOL pCanRebakeRegio void LLMenuOptionPathfindingRebakeNavmesh::handleRebakeNavMeshResponse(bool pResponseStatus) { llassert(mIsInitialized); - if (getMode() == kRebakeNavMesh_RequestSent) + if (mIsInitialized) { - setMode(pResponseStatus ? kRebakeNavMesh_InProgress : kRebakeNavMesh_Default); - } + if (getMode() == kRebakeNavMesh_RequestSent) + { + setMode(pResponseStatus ? kRebakeNavMesh_InProgress : kRebakeNavMesh_Default); + } - if (!pResponseStatus) - { - LLNotificationsUtil::add("PathfindingCannotRebakeNavmesh"); + if (!pResponseStatus) + { + LLNotificationsUtil::add("PathfindingCannotRebakeNavmesh"); + } } } void LLMenuOptionPathfindingRebakeNavmesh::handleNavMeshStatus(const LLPathfindingNavMeshStatus &pNavMeshStatus) { llassert(mIsInitialized); - ERebakeNavMeshMode rebakeNavMeshMode = kRebakeNavMesh_Default; - if (pNavMeshStatus.isValid()) + if (mIsInitialized) { - switch (pNavMeshStatus.getStatus()) + ERebakeNavMeshMode rebakeNavMeshMode = kRebakeNavMesh_Default; + if (pNavMeshStatus.isValid()) { - case LLPathfindingNavMeshStatus::kPending : - case LLPathfindingNavMeshStatus::kRepending : - rebakeNavMeshMode = kRebakeNavMesh_Available; - break; - case LLPathfindingNavMeshStatus::kBuilding : - rebakeNavMeshMode = kRebakeNavMesh_InProgress; - break; - case LLPathfindingNavMeshStatus::kComplete : - rebakeNavMeshMode = kRebakeNavMesh_NotAvailable; - break; - default : - rebakeNavMeshMode = kRebakeNavMesh_Default; - llassert(0); - break; + switch (pNavMeshStatus.getStatus()) + { + case LLPathfindingNavMeshStatus::kPending : + case LLPathfindingNavMeshStatus::kRepending : + rebakeNavMeshMode = kRebakeNavMesh_Available; + break; + case LLPathfindingNavMeshStatus::kBuilding : + rebakeNavMeshMode = kRebakeNavMesh_InProgress; + break; + case LLPathfindingNavMeshStatus::kComplete : + rebakeNavMeshMode = kRebakeNavMesh_NotAvailable; + break; + default: + rebakeNavMeshMode = kRebakeNavMesh_Default; + llassert(0); + break; + } } - } - setMode(rebakeNavMeshMode); + setMode(rebakeNavMeshMode); + } } void LLMenuOptionPathfindingRebakeNavmesh::handleRegionBoundaryCrossed() { llassert(mIsInitialized); - createNavMeshStatusListenerForCurrentRegion(); - mCanRebakeRegion = FALSE; - LLPathfindingManager::getInstance()->requestGetAgentState(); + if (mIsInitialized) + { + createNavMeshStatusListenerForCurrentRegion(); + mCanRebakeRegion = FALSE; + LLPathfindingManager::getInstance()->requestGetAgentState(); + } } void LLMenuOptionPathfindingRebakeNavmesh::createNavMeshStatusListenerForCurrentRegion() @@ -235,3 +242,4 @@ void LLMenuOptionPathfindingRebakeNavmesh::createNavMeshStatusListenerForCurrent LLPathfindingManager::getInstance()->requestGetNavMeshForRegion(currentRegion, true); } } + diff --git a/indra/newview/llmutelist.cpp b/indra/newview/llmutelist.cpp index 99b541b23..723a9cc94 100644 --- a/indra/newview/llmutelist.cpp +++ b/indra/newview/llmutelist.cpp @@ -65,7 +65,6 @@ #include "lluistring.h" #include "llviewerobject.h" #include "llviewerobjectlist.h" -#include "llenvmanager.h" namespace { @@ -235,7 +234,7 @@ LLMuteList::LLMuteList() : gGenericDispatcher.addHandler("emptymutelist", &sDispatchEmptyMuteList); checkNewRegion(); - LLEnvManagerNew::instance().setRegionChangeCallback(boost::bind(&LLMuteList::checkNewRegion, this)); + gAgent.addRegionChangedCallback(boost::bind(&LLMuteList::checkNewRegion, this)); } //----------------------------------------------------------------------------- diff --git a/indra/newview/llpanelavatar.cpp b/indra/newview/llpanelavatar.cpp index 94cd97200..f8cecab8c 100644 --- a/indra/newview/llpanelavatar.cpp +++ b/indra/newview/llpanelavatar.cpp @@ -473,7 +473,7 @@ BOOL LLPanelAvatarSecondLife::postBuild(void) getChild("Find on Map")->setCommitCallback(boost::bind(LLAvatarActions::showOnMap, boost::bind(&LLPanelAvatar::getAvatarID, pa))); getChild("Instant Message...")->setCommitCallback(boost::bind(LLAvatarActions::startIM, boost::bind(&LLPanelAvatar::getAvatarID, pa))); - getChild("GroupInvite_Button")->setCommitCallback(boost::bind(LLAvatarActions::inviteToGroup, boost::bind(&LLPanelAvatar::getAvatarID, pa))); + getChild("GroupInvite_Button")->setCommitCallback(boost::bind(static_cast(LLAvatarActions::inviteToGroup), boost::bind(&LLPanelAvatar::getAvatarID, pa))); getChild("Add Friend...")->setCommitCallback(boost::bind(LLAvatarActions::requestFriendshipDialog, boost::bind(&LLPanelAvatar::getAvatarID, pa))); getChild("Pay...")->setCommitCallback(boost::bind(LLAvatarActions::pay, boost::bind(&LLPanelAvatar::getAvatarID, pa))); @@ -1631,12 +1631,12 @@ void LLPanelAvatar::resetGroupList() group_list->deleteAllItems(); - S32 count = gAgent.mGroups.count(); + S32 count = gAgent.mGroups.size(); LLUUID id; for(S32 i = 0; i < count; ++i) { - LLGroupData group_data = gAgent.mGroups.get(i); + LLGroupData group_data = gAgent.mGroups[i]; id = group_data.mID; std::string group_string; /* Show group title? DUMMY_POWER for Don Grep diff --git a/indra/newview/llpaneldirclassified.cpp b/indra/newview/llpaneldirclassified.cpp index 2bc854864..fb26e398f 100644 --- a/indra/newview/llpaneldirclassified.cpp +++ b/indra/newview/llpaneldirclassified.cpp @@ -119,7 +119,8 @@ BOOL LLPanelDirClassified::postBuild() // Don't do this every time we open find, it's expensive; require clicking 'search' //requestClassified(); - childSetVisible("filter_gaming", (gAgent.getRegion()->getGamingFlags() & REGION_GAMING_PRESENT) && !(gAgent.getRegion()->getGamingFlags() & REGION_GAMING_HIDE_FIND_CLASSIFIEDS)); + LLViewerRegion* region(gAgent.getRegion()); + getChildView("filter_gaming")->setVisible(region && (region->getGamingFlags() & REGION_GAMING_PRESENT) && !(region->getGamingFlags() & REGION_GAMING_HIDE_FIND_CLASSIFIEDS)); return TRUE; } diff --git a/indra/newview/llpaneldirevents.cpp b/indra/newview/llpaneldirevents.cpp index 8b7453b1b..f38b7efa7 100644 --- a/indra/newview/llpaneldirevents.cpp +++ b/indra/newview/llpaneldirevents.cpp @@ -93,7 +93,8 @@ BOOL LLPanelDirEvents::postBuild() } gDisplayEventHack = FALSE; - childSetVisible("filter_gaming", (gAgent.getRegion()->getGamingFlags() & REGION_GAMING_PRESENT) && !(gAgent.getRegion()->getGamingFlags() & REGION_GAMING_HIDE_FIND_EVENTS)); + LLViewerRegion* region(gAgent.getRegion()); + getChildView("filter_gaming")->setVisible(region && (gAgent.getRegion()->getGamingFlags() & REGION_GAMING_PRESENT) && !(gAgent.getRegion()->getGamingFlags() & REGION_GAMING_HIDE_FIND_EVENTS)); return TRUE; } diff --git a/indra/newview/llpaneldirfind.cpp b/indra/newview/llpaneldirfind.cpp index 5e132cb07..08f685f80 100644 --- a/indra/newview/llpaneldirfind.cpp +++ b/indra/newview/llpaneldirfind.cpp @@ -250,7 +250,10 @@ BOOL LLPanelDirFind::postBuild() } if (LLUICtrl* ctrl = findChild("filter_gaming")) - ctrl->setVisible(gAgent.getRegion() && (gAgent.getRegion()->getGamingFlags() & REGION_GAMING_PRESENT) && !(gAgent.getRegion()->getGamingFlags() & REGION_GAMING_HIDE_FIND_ALL)); + { + const LLViewerRegion* region(gAgent.getRegion()); + ctrl->setVisible(region && (region->getGamingFlags() & REGION_GAMING_PRESENT) && !(region->getGamingFlags() & REGION_GAMING_HIDE_FIND_ALL)); + } return TRUE; } diff --git a/indra/newview/llpaneldirgroups.cpp b/indra/newview/llpaneldirgroups.cpp index 6cdcdd538..bbd07ed2d 100644 --- a/indra/newview/llpaneldirgroups.cpp +++ b/indra/newview/llpaneldirgroups.cpp @@ -61,7 +61,8 @@ BOOL LLPanelDirGroups::postBuild() childDisable("Search"); setDefaultBtn( "Search" ); - childSetVisible("filter_gaming", (gAgent.getRegion()->getGamingFlags() & REGION_GAMING_PRESENT) && !(gAgent.getRegion()->getGamingFlags() & REGION_GAMING_HIDE_FIND_GROUPS)); + LLViewerRegion* region(gAgent.getRegion()); + getChildView("filter_gaming")->setVisible(region && (region->getGamingFlags() & REGION_GAMING_PRESENT) && !(region->getGamingFlags() & REGION_GAMING_HIDE_FIND_GROUPS)); return TRUE; } diff --git a/indra/newview/llpaneldirland.cpp b/indra/newview/llpaneldirland.cpp index 9c249a81d..ccb253111 100644 --- a/indra/newview/llpaneldirland.cpp +++ b/indra/newview/llpaneldirland.cpp @@ -126,7 +126,8 @@ BOOL LLPanelDirLand::postBuild() } } - childSetVisible("filter_gaming", (gAgent.getRegion()->getGamingFlags() & REGION_GAMING_PRESENT) && !(gAgent.getRegion()->getGamingFlags() & REGION_GAMING_HIDE_FIND_LAND)); + LLViewerRegion* region(gAgent.getRegion()); + getChildView("filter_gaming")->setVisible(region && (region->getGamingFlags() & REGION_GAMING_PRESENT) && !(region->getGamingFlags() & REGION_GAMING_HIDE_FIND_LAND)); return TRUE; } diff --git a/indra/newview/llpaneldirplaces.cpp b/indra/newview/llpaneldirplaces.cpp index 706d9013c..971d7f162 100644 --- a/indra/newview/llpaneldirplaces.cpp +++ b/indra/newview/llpaneldirplaces.cpp @@ -99,7 +99,8 @@ BOOL LLPanelDirPlaces::postBuild() childSetEnabled("Category", true); } - childSetVisible("filter_gaming", (gAgent.getRegion()->getGamingFlags() & REGION_GAMING_PRESENT) && !(gAgent.getRegion()->getGamingFlags() & REGION_GAMING_HIDE_FIND_SIMS)); + LLViewerRegion* region(gAgent.getRegion()); + getChildView("filter_gaming")->setVisible(region && (region->getGamingFlags() & REGION_GAMING_PRESENT) && !(region->getGamingFlags() & REGION_GAMING_HIDE_FIND_SIMS)); // Don't prepopulate the places list, as it hurts the database as of 2006-12-04. JC // initialQuery(); diff --git a/indra/newview/llpathfindingmanager.cpp b/indra/newview/llpathfindingmanager.cpp index 79147655b..5e1bb5c6a 100644 --- a/indra/newview/llpathfindingmanager.cpp +++ b/indra/newview/llpathfindingmanager.cpp @@ -56,15 +56,6 @@ #include "llviewerregion.h" #include "llweb.h" -class AIHTTPTimeoutPolicy; -extern AIHTTPTimeoutPolicy navMeshStatusResponder_timeout; -extern AIHTTPTimeoutPolicy navMeshResponder_timeout; -extern AIHTTPTimeoutPolicy agentStateResponder_timeout; -extern AIHTTPTimeoutPolicy navMeshRebakeResponder_timeout; -extern AIHTTPTimeoutPolicy objectLinksetsResponder_timeout; -extern AIHTTPTimeoutPolicy terrainLinksetsResponder_timeout; -extern AIHTTPTimeoutPolicy charactersResponder_timeout; - #define CAP_SERVICE_RETRIEVE_NAVMESH "RetrieveNavMeshSrc" #define CAP_SERVICE_NAVMESH_STATUS "NavMeshGenerationStatus" @@ -112,19 +103,18 @@ LLHTTPRegistration gHTTPRegistrationAgentStateChangeNode class NavMeshStatusResponder : public LLHTTPClient::ResponderWithResult { + LOG_CLASS(NavMeshStatusResponder); public: - NavMeshStatusResponder(const std::string &pCapabilityURL, LLViewerRegion *pRegion, bool pIsGetStatusOnly); + NavMeshStatusResponder(LLViewerRegion *pRegion, bool pIsGetStatusOnly); virtual ~NavMeshStatusResponder(); - /*virtual*/ void httpSuccess(void); - /*virtual*/ void httpFailure(void); - /*virtual*/ AIHTTPTimeoutPolicy const& getHTTPTimeoutPolicy(void) const { return navMeshStatusResponder_timeout; } /*virtual*/ char const* getName(void) const { return "NavMeshStatusResponder"; } protected: + virtual void httpSuccess(); + virtual void httpFailure(); private: - std::string mCapabilityURL; LLViewerRegion *mRegion; LLUUID mRegionUUID; bool mIsGetStatusOnly; @@ -136,19 +126,18 @@ private: class NavMeshResponder : public LLHTTPClient::ResponderWithResult { + LOG_CLASS(NavMeshResponder); public: - NavMeshResponder(const std::string &pCapabilityURL, U32 pNavMeshVersion, LLPathfindingNavMeshPtr pNavMeshPtr); + NavMeshResponder(U32 pNavMeshVersion, LLPathfindingNavMeshPtr pNavMeshPtr); virtual ~NavMeshResponder(); - /*virtual*/ void httpSuccess(void); - /*virtual*/ void httpFailure(void); - /*virtual*/ AIHTTPTimeoutPolicy const& getHTTPTimeoutPolicy(void) const { return navMeshResponder_timeout; } /*virtual*/ char const* getName(void) const { return "NavMeshResponder"; } protected: + virtual void httpSuccess(); + virtual void httpFailure(); private: - std::string mCapabilityURL; U32 mNavMeshVersion; LLPathfindingNavMeshPtr mNavMeshPtr; }; @@ -159,19 +148,16 @@ private: class AgentStateResponder : public LLHTTPClient::ResponderWithResult { + LOG_CLASS(AgentStateResponder); public: - AgentStateResponder(const std::string &pCapabilityURL); + AgentStateResponder(); virtual ~AgentStateResponder(); - /*virtual*/ void httpSuccess(void); - /*virtual*/ void httpFailure(void); - /*virtual*/ AIHTTPTimeoutPolicy const& getHTTPTimeoutPolicy(void) const { return agentStateResponder_timeout; } /*virtual*/ char const* getName(void) const { return "AgentStateResponder"; } protected: - -private: - std::string mCapabilityURL; + virtual void httpSuccess(); + virtual void httpFailure(); }; @@ -180,19 +166,18 @@ private: //--------------------------------------------------------------------------- class NavMeshRebakeResponder : public LLHTTPClient::ResponderWithResult { + LOG_CLASS(NavMeshRebakeResponder); public: - NavMeshRebakeResponder(const std::string &pCapabilityURL, LLPathfindingManager::rebake_navmesh_callback_t pRebakeNavMeshCallback); + NavMeshRebakeResponder(LLPathfindingManager::rebake_navmesh_callback_t pRebakeNavMeshCallback); virtual ~NavMeshRebakeResponder(); - /*virtual*/ void httpSuccess(void); - /*virtual*/ void httpFailure(void); - /*virtual*/ AIHTTPTimeoutPolicy const& getHTTPTimeoutPolicy(void) const { return navMeshRebakeResponder_timeout; } /*virtual*/ char const* getName(void) const { return "NavMeshRebakeResponder"; } protected: + virtual void httpSuccess(); + virtual void httpFailure(); private: - std::string mCapabilityURL; LLPathfindingManager::rebake_navmesh_callback_t mRebakeNavMeshCallback; }; @@ -207,9 +192,9 @@ public: virtual ~LinksetsResponder(); void handleObjectLinksetsResult(const LLSD &pContent); - void handleObjectLinksetsError(U32 pStatus, const std::string &pReason, const std::string &pURL); + void handleObjectLinksetsError(); void handleTerrainLinksetsResult(const LLSD &pContent); - void handleTerrainLinksetsError(U32 pStatus, const std::string &pReason, const std::string &pURL); + void handleTerrainLinksetsError(); protected: @@ -241,19 +226,18 @@ typedef boost::shared_ptr LinksetsResponderPtr; //--------------------------------------------------------------------------- class ObjectLinksetsResponder : public LLHTTPClient::ResponderWithResult { + LOG_CLASS(ObjectLinksetsResponder); public: - ObjectLinksetsResponder(const std::string &pCapabilityURL, LinksetsResponderPtr pLinksetsResponsderPtr); + ObjectLinksetsResponder(LinksetsResponderPtr pLinksetsResponsderPtr); virtual ~ObjectLinksetsResponder(); - /*virtual*/ void httpSuccess(void); - /*virtual*/ void httpFailure(void); - /*virtual*/ AIHTTPTimeoutPolicy const& getHTTPTimeoutPolicy(void) const { return objectLinksetsResponder_timeout; } /*virtual*/ char const* getName(void) const { return "ObjectLinksetsResponder"; } protected: + virtual void httpSuccess(); + virtual void httpFailure(); private: - std::string mCapabilityURL; LinksetsResponderPtr mLinksetsResponsderPtr; }; @@ -262,19 +246,18 @@ private: //--------------------------------------------------------------------------- class TerrainLinksetsResponder : public LLHTTPClient::ResponderWithResult { + LOG_CLASS(TerrainLinksetsResponder); public: - TerrainLinksetsResponder(const std::string &pCapabilityURL, LinksetsResponderPtr pLinksetsResponsderPtr); + TerrainLinksetsResponder(LinksetsResponderPtr pLinksetsResponsderPtr); virtual ~TerrainLinksetsResponder(); - /*virtual*/ void httpSuccess(void); - /*virtual*/ void httpFailure(void); - /*virtual*/ AIHTTPTimeoutPolicy const& getHTTPTimeoutPolicy(void) const { return terrainLinksetsResponder_timeout; } /*virtual*/ char const* getName(void) const { return "TerrainLinksetsResponder"; } protected: + virtual void httpSuccess(); + virtual void httpFailure(); private: - std::string mCapabilityURL; LinksetsResponderPtr mLinksetsResponsderPtr; }; @@ -283,19 +266,18 @@ private: //--------------------------------------------------------------------------- class CharactersResponder : public LLHTTPClient::ResponderWithResult { + LOG_CLASS(TerrainLinksetsResponder); public: - CharactersResponder(const std::string &pCapabilityURL, LLPathfindingManager::request_id_t pRequestId, LLPathfindingManager::object_request_callback_t pCharactersCallback); + CharactersResponder(LLPathfindingManager::request_id_t pRequestId, LLPathfindingManager::object_request_callback_t pCharactersCallback); virtual ~CharactersResponder(); - /*virtual*/ void httpSuccess(void); - /*virtual*/ void httpFailure(void); - /*virtual*/ AIHTTPTimeoutPolicy const& getHTTPTimeoutPolicy(void) const { return charactersResponder_timeout; } /*virtual*/ char const* getName(void) const { return "CharactersResponder"; } protected: + virtual void httpSuccess(); + virtual void httpFailure(); private: - std::string mCapabilityURL; LLPathfindingManager::request_id_t mRequestId; LLPathfindingManager::object_request_callback_t mCharactersCallback; }; @@ -382,7 +364,7 @@ void LLPathfindingManager::requestGetNavMeshForRegion(LLViewerRegion *pRegion, b std::string navMeshStatusURL = getNavMeshStatusURLForRegion(pRegion); llassert(!navMeshStatusURL.empty()); navMeshPtr->handleNavMeshCheckVersion(); - LLHTTPClient::ResponderPtr navMeshStatusResponder = new NavMeshStatusResponder(navMeshStatusURL, pRegion, pIsGetStatusOnly); + LLHTTPClient::ResponderPtr navMeshStatusResponder = new NavMeshStatusResponder(pRegion, pIsGetStatusOnly); LLHTTPClient::get(navMeshStatusURL, navMeshStatusResponder); } } @@ -416,12 +398,12 @@ void LLPathfindingManager::requestGetLinksets(request_id_t pRequestId, object_re bool doRequestTerrain = isAllowViewTerrainProperties(); LinksetsResponderPtr linksetsResponderPtr(new LinksetsResponder(pRequestId, pLinksetsCallback, true, doRequestTerrain)); - LLHTTPClient::ResponderPtr objectLinksetsResponder = new ObjectLinksetsResponder(objectLinksetsURL, linksetsResponderPtr); + LLHTTPClient::ResponderPtr objectLinksetsResponder = new ObjectLinksetsResponder(linksetsResponderPtr); LLHTTPClient::get(objectLinksetsURL, objectLinksetsResponder); if (doRequestTerrain) { - LLHTTPClient::ResponderPtr terrainLinksetsResponder = new TerrainLinksetsResponder(terrainLinksetsURL, linksetsResponderPtr); + LLHTTPClient::ResponderPtr terrainLinksetsResponder = new TerrainLinksetsResponder(linksetsResponderPtr); LLHTTPClient::get(terrainLinksetsURL, terrainLinksetsResponder); } } @@ -465,13 +447,13 @@ void LLPathfindingManager::requestSetLinksets(request_id_t pRequestId, const LLP if (!objectPostData.isUndefined()) { - LLHTTPClient::ResponderPtr objectLinksetsResponder = new ObjectLinksetsResponder(objectLinksetsURL, linksetsResponderPtr); + LLHTTPClient::ResponderPtr objectLinksetsResponder = new ObjectLinksetsResponder(linksetsResponderPtr); LLHTTPClient::put(objectLinksetsURL, objectPostData, objectLinksetsResponder); } if (!terrainPostData.isUndefined()) { - LLHTTPClient::ResponderPtr terrainLinksetsResponder = new TerrainLinksetsResponder(terrainLinksetsURL, linksetsResponderPtr); + LLHTTPClient::ResponderPtr terrainLinksetsResponder = new TerrainLinksetsResponder(linksetsResponderPtr); LLHTTPClient::put(terrainLinksetsURL, terrainPostData, terrainLinksetsResponder); } } @@ -504,7 +486,7 @@ void LLPathfindingManager::requestGetCharacters(request_id_t pRequestId, object_ { pCharactersCallback(pRequestId, kRequestStarted, emptyCharacterListPtr); - LLHTTPClient::ResponderPtr charactersResponder = new CharactersResponder(charactersURL, pRequestId, pCharactersCallback); + LLHTTPClient::ResponderPtr charactersResponder = new CharactersResponder(pRequestId, pCharactersCallback); LLHTTPClient::get(charactersURL, charactersResponder); } } @@ -537,7 +519,7 @@ void LLPathfindingManager::requestGetAgentState() { std::string agentStateURL = getAgentStateURLForRegion(currentRegion); llassert(!agentStateURL.empty()); - LLHTTPClient::ResponderPtr responder = new AgentStateResponder(agentStateURL); + LLHTTPClient::ResponderPtr responder = new AgentStateResponder(); LLHTTPClient::get(agentStateURL, responder); } } @@ -561,7 +543,7 @@ void LLPathfindingManager::requestRebakeNavMesh(rebake_navmesh_callback_t pRebak llassert(!navMeshStatusURL.empty()); LLSD postData; postData["command"] = "rebuild"; - LLHTTPClient::ResponderPtr responder = new NavMeshRebakeResponder(navMeshStatusURL, pRebakeNavMeshCallback); + LLHTTPClient::ResponderPtr responder = new NavMeshRebakeResponder(pRebakeNavMeshCallback); LLHTTPClient::post(navMeshStatusURL, postData, responder); } } @@ -583,7 +565,7 @@ void LLPathfindingManager::sendRequestGetNavMeshForRegion(LLPathfindingNavMeshPt else { navMeshPtr->handleNavMeshStart(pNavMeshStatus); - LLHTTPClient::ResponderPtr responder = new NavMeshResponder(navMeshURL, pNavMeshStatus.getVersion(), navMeshPtr); + LLHTTPClient::ResponderPtr responder = new NavMeshResponder(pNavMeshStatus.getVersion(), navMeshPtr); LLSD postData; LLHTTPClient::post(navMeshURL, postData, responder); @@ -797,8 +779,8 @@ void LLAgentStateChangeNode::post(ResponsePtr pResponse, const LLSD &pContext, c // NavMeshStatusResponder //--------------------------------------------------------------------------- -NavMeshStatusResponder::NavMeshStatusResponder(const std::string &pCapabilityURL, LLViewerRegion *pRegion, bool pIsGetStatusOnly) : - mCapabilityURL(pCapabilityURL), +NavMeshStatusResponder::NavMeshStatusResponder(LLViewerRegion *pRegion, bool pIsGetStatusOnly) + : mRegion(pRegion), mRegionUUID(), mIsGetStatusOnly(pIsGetStatusOnly) @@ -813,15 +795,15 @@ NavMeshStatusResponder::~NavMeshStatusResponder() { } -void NavMeshStatusResponder::httpSuccess(void) +void NavMeshStatusResponder::httpSuccess() { - LLPathfindingNavMeshStatus navMeshStatus(mRegionUUID, mContent); + LLPathfindingNavMeshStatus navMeshStatus(mRegionUUID, getContent()); LLPathfindingManager::getInstance()->handleNavMeshStatusRequest(navMeshStatus, mRegion, mIsGetStatusOnly); } -void NavMeshStatusResponder::httpFailure(void) +void NavMeshStatusResponder::httpFailure() { - llwarns << "error with request to URL '" << mCapabilityURL << "' because " << mReason << " (statusCode:" << mStatus << ")" << llendl; + llwarns << dumpResponse() << llendl; LLPathfindingNavMeshStatus navMeshStatus(mRegionUUID); LLPathfindingManager::getInstance()->handleNavMeshStatusRequest(navMeshStatus, mRegion, mIsGetStatusOnly); } @@ -830,8 +812,8 @@ void NavMeshStatusResponder::httpFailure(void) // NavMeshResponder //--------------------------------------------------------------------------- -NavMeshResponder::NavMeshResponder(const std::string &pCapabilityURL, U32 pNavMeshVersion, LLPathfindingNavMeshPtr pNavMeshPtr) : - mCapabilityURL(pCapabilityURL), +NavMeshResponder::NavMeshResponder(U32 pNavMeshVersion, LLPathfindingNavMeshPtr pNavMeshPtr) + : mNavMeshVersion(pNavMeshVersion), mNavMeshPtr(pNavMeshPtr) { @@ -841,21 +823,22 @@ NavMeshResponder::~NavMeshResponder() { } -void NavMeshResponder::httpSuccess(void) +void NavMeshResponder::httpSuccess() { - mNavMeshPtr->handleNavMeshResult(mContent, mNavMeshVersion); + mNavMeshPtr->handleNavMeshResult(getContent(), mNavMeshVersion); } -void NavMeshResponder::httpFailure(void) +void NavMeshResponder::httpFailure() { - mNavMeshPtr->handleNavMeshError(mStatus, mReason, mCapabilityURL, mNavMeshVersion); + llwarns << dumpResponse() << llendl; + mNavMeshPtr->handleNavMeshError(mNavMeshVersion); } //--------------------------------------------------------------------------- // AgentStateResponder //--------------------------------------------------------------------------- -AgentStateResponder::AgentStateResponder(const std::string &pCapabilityURL) : mCapabilityURL(pCapabilityURL) +AgentStateResponder::AgentStateResponder() { } @@ -863,17 +846,18 @@ AgentStateResponder::~AgentStateResponder() { } -void AgentStateResponder::httpSuccess(void) +void AgentStateResponder::httpSuccess() { - llassert(mContent.has(AGENT_STATE_CAN_REBAKE_REGION_FIELD)); - llassert(mContent.get(AGENT_STATE_CAN_REBAKE_REGION_FIELD).isBoolean()); - BOOL canRebakeRegion = mContent.get(AGENT_STATE_CAN_REBAKE_REGION_FIELD).asBoolean(); + const LLSD& pContent = getContent(); + llassert(pContent.has(AGENT_STATE_CAN_REBAKE_REGION_FIELD)); + llassert(pContent.get(AGENT_STATE_CAN_REBAKE_REGION_FIELD).isBoolean()); + BOOL canRebakeRegion = pContent.get(AGENT_STATE_CAN_REBAKE_REGION_FIELD).asBoolean(); LLPathfindingManager::getInstance()->handleAgentState(canRebakeRegion); } -void AgentStateResponder::httpFailure(void) +void AgentStateResponder::httpFailure() { - llwarns << "error with request to URL '" << mCapabilityURL << "' because " << mReason << " (statusCode:" << mStatus << ")" << llendl; + llwarns << dumpResponse() << llendl; LLPathfindingManager::getInstance()->handleAgentState(FALSE); } @@ -881,8 +865,8 @@ void AgentStateResponder::httpFailure(void) //--------------------------------------------------------------------------- // navmesh rebake responder //--------------------------------------------------------------------------- -NavMeshRebakeResponder::NavMeshRebakeResponder(const std::string &pCapabilityURL, LLPathfindingManager::rebake_navmesh_callback_t pRebakeNavMeshCallback) : - mCapabilityURL(pCapabilityURL), +NavMeshRebakeResponder::NavMeshRebakeResponder(LLPathfindingManager::rebake_navmesh_callback_t pRebakeNavMeshCallback) + : mRebakeNavMeshCallback(pRebakeNavMeshCallback) { } @@ -891,14 +875,14 @@ NavMeshRebakeResponder::~NavMeshRebakeResponder() { } -void NavMeshRebakeResponder::httpSuccess(void) +void NavMeshRebakeResponder::httpSuccess() { mRebakeNavMeshCallback(true); } -void NavMeshRebakeResponder::httpFailure(void) +void NavMeshRebakeResponder::httpFailure() { - llwarns << "error with request to URL '" << mCapabilityURL << "' because " << mReason << " (statusCode:" << mStatus << ")" << llendl; + llwarns << dumpResponse() << llendl; mRebakeNavMeshCallback(false); } @@ -931,9 +915,9 @@ void LinksetsResponder::handleObjectLinksetsResult(const LLSD &pContent) } } -void LinksetsResponder::handleObjectLinksetsError(U32 pStatus, const std::string &pReason, const std::string &pURL) +void LinksetsResponder::handleObjectLinksetsError() { - llwarns << "error with request to URL '" << pURL << "' because " << pReason << " (statusCode:" << pStatus << ")" << llendl; + llwarns << "LinksetsResponder object linksets error" << llendl; mObjectMessagingState = kReceivedError; if (mTerrainMessagingState != kWaiting) { @@ -952,8 +936,9 @@ void LinksetsResponder::handleTerrainLinksetsResult(const LLSD &pContent) } } -void LinksetsResponder::handleTerrainLinksetsError(U32 pStatus, const std::string &pReason, const std::string &pURL) +void LinksetsResponder::handleTerrainLinksetsError() { + llwarns << "LinksetsResponder terrain linksets error" << llendl; mTerrainMessagingState = kReceivedError; if (mObjectMessagingState != kWaiting) { @@ -987,8 +972,8 @@ void LinksetsResponder::sendCallback() // ObjectLinksetsResponder //--------------------------------------------------------------------------- -ObjectLinksetsResponder::ObjectLinksetsResponder(const std::string &pCapabilityURL, LinksetsResponderPtr pLinksetsResponsderPtr) : - mCapabilityURL(pCapabilityURL), +ObjectLinksetsResponder::ObjectLinksetsResponder(LinksetsResponderPtr pLinksetsResponsderPtr) + : mLinksetsResponsderPtr(pLinksetsResponsderPtr) { } @@ -997,22 +982,23 @@ ObjectLinksetsResponder::~ObjectLinksetsResponder() { } -void ObjectLinksetsResponder::httpSuccess(void) +void ObjectLinksetsResponder::httpSuccess() { - mLinksetsResponsderPtr->handleObjectLinksetsResult(mContent); + mLinksetsResponsderPtr->handleObjectLinksetsResult(getContent()); } -void ObjectLinksetsResponder::httpFailure(void) +void ObjectLinksetsResponder::httpFailure() { - mLinksetsResponsderPtr->handleObjectLinksetsError(mStatus, mReason, mCapabilityURL); + llwarns << dumpResponse() << llendl; + mLinksetsResponsderPtr->handleObjectLinksetsError(); } //--------------------------------------------------------------------------- // TerrainLinksetsResponder //--------------------------------------------------------------------------- -TerrainLinksetsResponder::TerrainLinksetsResponder(const std::string &pCapabilityURL, LinksetsResponderPtr pLinksetsResponsderPtr) : - mCapabilityURL(pCapabilityURL), +TerrainLinksetsResponder::TerrainLinksetsResponder(LinksetsResponderPtr pLinksetsResponsderPtr) + : mLinksetsResponsderPtr(pLinksetsResponsderPtr) { } @@ -1021,22 +1007,23 @@ TerrainLinksetsResponder::~TerrainLinksetsResponder() { } -void TerrainLinksetsResponder::httpSuccess(void) +void TerrainLinksetsResponder::httpSuccess() { - mLinksetsResponsderPtr->handleTerrainLinksetsResult(mContent); + mLinksetsResponsderPtr->handleTerrainLinksetsResult(getContent()); } -void TerrainLinksetsResponder::httpFailure(void) +void TerrainLinksetsResponder::httpFailure() { - mLinksetsResponsderPtr->handleTerrainLinksetsError(mStatus, mReason, mCapabilityURL); + llwarns << dumpResponse() << llendl; + mLinksetsResponsderPtr->handleTerrainLinksetsError(); } //--------------------------------------------------------------------------- // CharactersResponder //--------------------------------------------------------------------------- -CharactersResponder::CharactersResponder(const std::string &pCapabilityURL, LLPathfindingManager::request_id_t pRequestId, LLPathfindingManager::object_request_callback_t pCharactersCallback) : - mCapabilityURL(pCapabilityURL), +CharactersResponder::CharactersResponder(LLPathfindingManager::request_id_t pRequestId, LLPathfindingManager::object_request_callback_t pCharactersCallback) + : mRequestId(pRequestId), mCharactersCallback(pCharactersCallback) { @@ -1046,15 +1033,15 @@ CharactersResponder::~CharactersResponder() { } -void CharactersResponder::httpSuccess(void) +void CharactersResponder::httpSuccess() { - LLPathfindingObjectListPtr characterListPtr = LLPathfindingObjectListPtr(new LLPathfindingCharacterList(mContent)); + LLPathfindingObjectListPtr characterListPtr = LLPathfindingObjectListPtr(new LLPathfindingCharacterList(getContent())); mCharactersCallback(mRequestId, LLPathfindingManager::kRequestCompleted, characterListPtr); } -void CharactersResponder::httpFailure(void) +void CharactersResponder::httpFailure() { - llwarns << "error with request to URL '" << mCapabilityURL << "' because " << mReason << " (statusCode:" << mStatus << ")" << llendl; + llwarns << dumpResponse() << llendl; LLPathfindingObjectListPtr characterListPtr = LLPathfindingObjectListPtr(new LLPathfindingCharacterList()); mCharactersCallback(mRequestId, LLPathfindingManager::kRequestError, characterListPtr); diff --git a/indra/newview/llpathfindingnavmesh.cpp b/indra/newview/llpathfindingnavmesh.cpp index e01dd3a15..555105cf4 100644 --- a/indra/newview/llpathfindingnavmesh.cpp +++ b/indra/newview/llpathfindingnavmesh.cpp @@ -184,9 +184,8 @@ void LLPathfindingNavMesh::handleNavMeshError() setRequestStatus(kNavMeshRequestError); } -void LLPathfindingNavMesh::handleNavMeshError(U32 pStatus, const std::string &pReason, const std::string &pURL, U32 pNavMeshVersion) +void LLPathfindingNavMesh::handleNavMeshError(U32 pNavMeshVersion) { - llwarns << "error with request to URL '" << pURL << "' because " << pReason << " (statusCode:" << pStatus << ")" << llendl; if (mNavMeshStatus.getVersion() == pNavMeshVersion) { handleNavMeshError(); diff --git a/indra/newview/llpathfindingnavmesh.h b/indra/newview/llpathfindingnavmesh.h index 7a844f54c..87f32b8d5 100644 --- a/indra/newview/llpathfindingnavmesh.h +++ b/indra/newview/llpathfindingnavmesh.h @@ -74,7 +74,7 @@ public: void handleNavMeshResult(const LLSD &pContent, U32 pNavMeshVersion); void handleNavMeshNotEnabled(); void handleNavMeshError(); - void handleNavMeshError(U32 pStatus, const std::string &pReason, const std::string &pURL, U32 pNavMeshVersion); + void handleNavMeshError(U32 pNavMeshVersion); protected: diff --git a/indra/newview/llstatusbar.cpp b/indra/newview/llstatusbar.cpp index d15900993..78ce1c0bd 100644 --- a/indra/newview/llstatusbar.cpp +++ b/indra/newview/llstatusbar.cpp @@ -38,7 +38,6 @@ #include "llagent.h" #include "llbutton.h" #include "llcommandhandler.h" -#include "llenvmanager.h" #include "llfloaterbuycurrency.h" #include "llfloaterchat.h" #include "llfloaterinventory.h" @@ -235,7 +234,7 @@ mIsNavMeshDirty(false) LLButton* buybtn = getChild("buycurrency"); buybtn->setLabelArg("[CURRENCY]", gHippoGridManager->getConnectedGrid()->getCurrencySymbol()); - mRegionCrossingSlot = LLEnvManagerNew::getInstance()->setRegionChangeCallback(boost::bind(&LLStatusBar::createNavMeshStatusListenerForCurrentRegion, this)); + mRegionCrossingSlot = gAgent.addRegionChangedCallback(boost::bind(&LLStatusBar::createNavMeshStatusListenerForCurrentRegion, this)); createNavMeshStatusListenerForCurrentRegion(); // Adding Net Stat Graph diff --git a/indra/newview/lltoolmgr.cpp b/indra/newview/lltoolmgr.cpp index 92e525882..542256af0 100644 --- a/indra/newview/lltoolmgr.cpp +++ b/indra/newview/lltoolmgr.cpp @@ -330,6 +330,11 @@ void LLToolMgr::toggleBuildMode() // avoid spurious avatar movements LLViewerJoystick::getInstance()->setNeedsReset(); + if (gFocusMgr.getKeyboardFocus()) gFloaterTools->setFocus(true); // Focus isn't on the world, give it to the build tools. + } + else if (gFloaterTools->getVisible() && !gFloaterTools->hasFocus() && gFocusMgr.getKeyboardFocus()) // Build tools is open, but not the focused floater, give it focus. + { + gFloaterTools->setFocus(true); } else { diff --git a/indra/newview/llvieweraudio.cpp b/indra/newview/llvieweraudio.cpp index 8f7a0ed65..164419dce 100644 --- a/indra/newview/llvieweraudio.cpp +++ b/indra/newview/llvieweraudio.cpp @@ -243,12 +243,11 @@ void audio_update_wind(bool fade) volume_delta = (LLFrameTimer::getFrameDeltaTimeF32() / WIND_SOUND_TRANSITION_TIME) * max_wind_volume; } - static LLCachedControl MuteWind("MuteWind"); - static LLCachedControl ContinueFlying("LiruContinueFlyingOnUnsit"); + static LLCachedControl MuteWind(gSavedSettings, "MuteWind", false); + static LLCachedControl ContinueFlying(gSavedSettings, "LiruContinueFlyingOnUnsit", false); // mute wind entirely when the user asked or when the user is seated, but flying - if (MuteWind || (ContinueFlying && gAgentAvatarp&& gAgentAvatarp->isSitting())) + if (MuteWind || (ContinueFlying && gAgentAvatarp && gAgentAvatarp->isSitting())) { - // volume decreases by itself gAudiop->mMaxWindGain = 0.f; } // mute wind when not /*flying*/ in air diff --git a/indra/newview/llviewercamera.cpp b/indra/newview/llviewercamera.cpp index ba35d78d8..041e804e7 100644 --- a/indra/newview/llviewercamera.cpp +++ b/indra/newview/llviewercamera.cpp @@ -293,8 +293,8 @@ void LLViewerCamera::setPerspective(BOOL for_selection, int pos_y = mZoomSubregion / llceil(mZoomFactor); int pos_x = mZoomSubregion - (pos_y*llceil(mZoomFactor)); - proj_mat.applyScale_affine(mZoomFactor,mZoomFactor,1.f); proj_mat.applyTranslation_affine(offset - (F32)pos_x * 2.f, offset - (F32)pos_y * 2.f, 0.f); + proj_mat.applyScale_affine(mZoomFactor,mZoomFactor,1.f); } calcProjection(z_far); // Update the projection matrix cache diff --git a/indra/newview/llviewerkeyboard.cpp b/indra/newview/llviewerkeyboard.cpp index 4bd4b4c42..9e07b42d4 100644 --- a/indra/newview/llviewerkeyboard.cpp +++ b/indra/newview/llviewerkeyboard.cpp @@ -45,7 +45,6 @@ #include "lltoolfocus.h" #include "llviewerwindow.h" #include "llvoavatarself.h" -#include "lllslconstants.h" // // Constants @@ -59,6 +58,11 @@ const S32 NUDGE_FRAMES = 2; const F32 ORBIT_NUDGE_RATE = 0.05f; // fraction of normal speed const F32 YAW_NUDGE_RATE = 0.05f; // fraction of normal speed +struct LLKeyboardActionRegistry +: public LLRegistrySingleton, LLKeyboardActionRegistry> +{ +}; + LLViewerKeyboard gViewerKeyboard; void agent_jump( EKeystate s ) @@ -66,6 +70,7 @@ void agent_jump( EKeystate s ) if( KEYSTATE_UP == s ) return; F32 time = gKeyboard->getCurKeyElapsedTime(); S32 frame_count = llmath::llround(gKeyboard->getCurKeyElapsedFrameCount()); + if( time < FLY_TIME || frame_count <= FLY_FRAMES || gAgent.upGrabbed() @@ -81,9 +86,9 @@ void agent_jump( EKeystate s ) } void agent_toggle_down( EKeystate s ) { - if(KEYSTATE_UP == s) return; - - if(KEYSTATE_DOWN == s && !gAgent.getFlying() && gSavedSettings.getBOOL("SGShiftCrouchToggle")) + if (KEYSTATE_UP == s) return; + + if (KEYSTATE_DOWN == s && !gAgent.getFlying() && gSavedSettings.getBOOL("SGShiftCrouchToggle")) { gAgent.toggleCrouch(); } @@ -242,7 +247,7 @@ void agent_toggle_fly( EKeystate s ) // Only catch the edge if (KEYSTATE_DOWN == s ) { - gAgent.toggleFlying(); + LLAgent::toggleFlying(); } } @@ -252,7 +257,7 @@ F32 get_orbit_rate() if( time < NUDGE_TIME ) { F32 rate = ORBIT_NUDGE_RATE + time * (1 - ORBIT_NUDGE_RATE)/ NUDGE_TIME; - //llinfos << rate << llendl; + //LL_INFOS() << rate << LL_ENDL; return rate; } else @@ -517,6 +522,11 @@ void stop_moving( EKeystate s ) void start_chat( EKeystate s ) { + if (LLAppViewer::instance()->quitRequested()) + { + return; // can't talk, gotta go, kthxbye! + } + // start chat gChatBar->startChat(NULL); } @@ -540,53 +550,51 @@ void start_gesture( EKeystate s ) } } -void bind_keyboard_functions() -{ - gViewerKeyboard.bindNamedFunction("jump", agent_jump); - gViewerKeyboard.bindNamedFunction("push_down", agent_push_down); - gViewerKeyboard.bindNamedFunction("push_forward", agent_push_forward); - gViewerKeyboard.bindNamedFunction("push_backward", agent_push_backward); - gViewerKeyboard.bindNamedFunction("look_up", agent_look_up); - gViewerKeyboard.bindNamedFunction("look_down", agent_look_down); - gViewerKeyboard.bindNamedFunction("toggle_down", agent_toggle_down); - gViewerKeyboard.bindNamedFunction("toggle_fly", agent_toggle_fly); - gViewerKeyboard.bindNamedFunction("turn_left", agent_turn_left); - gViewerKeyboard.bindNamedFunction("turn_right", agent_turn_right); - gViewerKeyboard.bindNamedFunction("slide_left", agent_slide_left); - gViewerKeyboard.bindNamedFunction("slide_right", agent_slide_right); - gViewerKeyboard.bindNamedFunction("spin_around_ccw", camera_spin_around_ccw); - gViewerKeyboard.bindNamedFunction("spin_around_cw", camera_spin_around_cw); - gViewerKeyboard.bindNamedFunction("spin_around_ccw_sitting", camera_spin_around_ccw_sitting); - gViewerKeyboard.bindNamedFunction("spin_around_cw_sitting", camera_spin_around_cw_sitting); - gViewerKeyboard.bindNamedFunction("spin_over", camera_spin_over); - gViewerKeyboard.bindNamedFunction("spin_under", camera_spin_under); - gViewerKeyboard.bindNamedFunction("spin_over_sitting", camera_spin_over_sitting); - gViewerKeyboard.bindNamedFunction("spin_under_sitting", camera_spin_under_sitting); - gViewerKeyboard.bindNamedFunction("move_forward", camera_move_forward); - gViewerKeyboard.bindNamedFunction("move_backward", camera_move_backward); - gViewerKeyboard.bindNamedFunction("move_forward_sitting", camera_move_forward_sitting); - gViewerKeyboard.bindNamedFunction("move_backward_sitting", camera_move_backward_sitting); - gViewerKeyboard.bindNamedFunction("pan_up", camera_pan_up); - gViewerKeyboard.bindNamedFunction("pan_down", camera_pan_down); - gViewerKeyboard.bindNamedFunction("pan_left", camera_pan_left); - gViewerKeyboard.bindNamedFunction("pan_right", camera_pan_right); - gViewerKeyboard.bindNamedFunction("pan_in", camera_pan_in); - gViewerKeyboard.bindNamedFunction("pan_out", camera_pan_out); - gViewerKeyboard.bindNamedFunction("move_forward_fast", camera_move_forward_fast); - gViewerKeyboard.bindNamedFunction("move_backward_fast", camera_move_backward_fast); - gViewerKeyboard.bindNamedFunction("edit_avatar_spin_ccw", edit_avatar_spin_ccw); - gViewerKeyboard.bindNamedFunction("edit_avatar_spin_cw", edit_avatar_spin_cw); - gViewerKeyboard.bindNamedFunction("edit_avatar_spin_over", edit_avatar_spin_over); - gViewerKeyboard.bindNamedFunction("edit_avatar_spin_under", edit_avatar_spin_under); - gViewerKeyboard.bindNamedFunction("edit_avatar_move_forward", edit_avatar_move_forward); - gViewerKeyboard.bindNamedFunction("edit_avatar_move_backward", edit_avatar_move_backward); - gViewerKeyboard.bindNamedFunction("stop_moving", stop_moving); - gViewerKeyboard.bindNamedFunction("start_chat", start_chat); - gViewerKeyboard.bindNamedFunction("start_gesture", start_gesture); -} +#define REGISTER_KEYBOARD_ACTION(KEY, ACTION) LLREGISTER_STATIC(LLKeyboardActionRegistry, KEY, ACTION); +REGISTER_KEYBOARD_ACTION("jump", agent_jump); +REGISTER_KEYBOARD_ACTION("push_down", agent_push_down); +REGISTER_KEYBOARD_ACTION("push_forward", agent_push_forward); +REGISTER_KEYBOARD_ACTION("push_backward", agent_push_backward); +REGISTER_KEYBOARD_ACTION("look_up", agent_look_up); +REGISTER_KEYBOARD_ACTION("look_down", agent_look_down); +REGISTER_KEYBOARD_ACTION("toggle_down", agent_toggle_down); +REGISTER_KEYBOARD_ACTION("toggle_fly", agent_toggle_fly); +REGISTER_KEYBOARD_ACTION("turn_left", agent_turn_left); +REGISTER_KEYBOARD_ACTION("turn_right", agent_turn_right); +REGISTER_KEYBOARD_ACTION("slide_left", agent_slide_left); +REGISTER_KEYBOARD_ACTION("slide_right", agent_slide_right); +REGISTER_KEYBOARD_ACTION("spin_around_ccw", camera_spin_around_ccw); +REGISTER_KEYBOARD_ACTION("spin_around_cw", camera_spin_around_cw); +REGISTER_KEYBOARD_ACTION("spin_around_ccw_sitting", camera_spin_around_ccw_sitting); +REGISTER_KEYBOARD_ACTION("spin_around_cw_sitting", camera_spin_around_cw_sitting); +REGISTER_KEYBOARD_ACTION("spin_over", camera_spin_over); +REGISTER_KEYBOARD_ACTION("spin_under", camera_spin_under); +REGISTER_KEYBOARD_ACTION("spin_over_sitting", camera_spin_over_sitting); +REGISTER_KEYBOARD_ACTION("spin_under_sitting", camera_spin_under_sitting); +REGISTER_KEYBOARD_ACTION("move_forward", camera_move_forward); +REGISTER_KEYBOARD_ACTION("move_backward", camera_move_backward); +REGISTER_KEYBOARD_ACTION("move_forward_sitting", camera_move_forward_sitting); +REGISTER_KEYBOARD_ACTION("move_backward_sitting", camera_move_backward_sitting); +REGISTER_KEYBOARD_ACTION("pan_up", camera_pan_up); +REGISTER_KEYBOARD_ACTION("pan_down", camera_pan_down); +REGISTER_KEYBOARD_ACTION("pan_left", camera_pan_left); +REGISTER_KEYBOARD_ACTION("pan_right", camera_pan_right); +REGISTER_KEYBOARD_ACTION("pan_in", camera_pan_in); +REGISTER_KEYBOARD_ACTION("pan_out", camera_pan_out); +REGISTER_KEYBOARD_ACTION("move_forward_fast", camera_move_forward_fast); +REGISTER_KEYBOARD_ACTION("move_backward_fast", camera_move_backward_fast); +REGISTER_KEYBOARD_ACTION("edit_avatar_spin_ccw", edit_avatar_spin_ccw); +REGISTER_KEYBOARD_ACTION("edit_avatar_spin_cw", edit_avatar_spin_cw); +REGISTER_KEYBOARD_ACTION("edit_avatar_spin_over", edit_avatar_spin_over); +REGISTER_KEYBOARD_ACTION("edit_avatar_spin_under", edit_avatar_spin_under); +REGISTER_KEYBOARD_ACTION("edit_avatar_move_forward", edit_avatar_move_forward); +REGISTER_KEYBOARD_ACTION("edit_avatar_move_backward", edit_avatar_move_backward); +REGISTER_KEYBOARD_ACTION("stop_moving", stop_moving); +REGISTER_KEYBOARD_ACTION("start_chat", start_chat); +REGISTER_KEYBOARD_ACTION("start_gesture", start_gesture); +#undef REGISTER_KEYBOARD_ACTION -LLViewerKeyboard::LLViewerKeyboard() : - mNamedFunctionCount(0) +LLViewerKeyboard::LLViewerKeyboard() { for (S32 i = 0; i < MODE_COUNT; i++) { @@ -604,16 +612,6 @@ LLViewerKeyboard::LLViewerKeyboard() : } } - -void LLViewerKeyboard::bindNamedFunction(const std::string& name, LLKeyFunc func) -{ - S32 i = mNamedFunctionCount; - mNamedFunctions[i].mName = name; - mNamedFunctions[i].mFunction = func; - mNamedFunctionCount++; -} - - BOOL LLViewerKeyboard::modeFromString(const std::string& string, S32 *mode) { if (string == "FIRST_PERSON") @@ -667,17 +665,21 @@ BOOL LLViewerKeyboard::handleKey(KEY translated_key, MASK translated_mask, BOOL return FALSE; } - lldebugst(LLERR_USER_INPUT) << "keydown -" << translated_key << "-" << llendl; + LL_DEBUGS("UserInput") << "keydown -" << translated_key << "-" << LL_ENDL; // skip skipped keys if(mKeysSkippedByUI.find(translated_key) != mKeysSkippedByUI.end()) { mKeyHandledByUI[translated_key] = FALSE; + LL_INFOS("Keyboard Handling") << "Key wasn't handled by UI!" << LL_ENDL; } else { // it is sufficient to set this value once per call to handlekey // without clearing it, as it is only used in the subsequent call to scanKey mKeyHandledByUI[translated_key] = gViewerWindow->handleKey(translated_key, translated_mask); + // mKeyHandledByUI is not what you think ... this indicates whether the UI has handled this keypress yet (any keypress) + // NOT whether some UI shortcut wishes to handle the keypress + } return mKeyHandledByUI[translated_key]; } @@ -686,8 +688,9 @@ BOOL LLViewerKeyboard::handleKey(KEY translated_key, MASK translated_mask, BOOL BOOL LLViewerKeyboard::bindKey(const S32 mode, const KEY key, const MASK mask, const std::string& function_name) { - S32 i,index; - void (*function)(EKeystate keystate) = NULL; + S32 index; + typedef boost::function function_t; + function_t function = NULL; std::string name; // Allow remapping of F2-F12 @@ -710,13 +713,11 @@ BOOL LLViewerKeyboard::bindKey(const S32 mode, const KEY key, const MASK mask, c } // Not remapped, look for a function - for (i = 0; i < mNamedFunctionCount; i++) + + function_t* result = LLKeyboardActionRegistry::getValue(function_name); + if (result) { - if (function_name == mNamedFunctions[i].mName) - { - function = mNamedFunctions[i].mFunction; - name = mNamedFunctions[i].mName; - } + function = *result; } if (!function) @@ -740,13 +741,12 @@ BOOL LLViewerKeyboard::bindKey(const S32 mode, const KEY key, const MASK mask, c if (mode >= MODE_COUNT) { - llerror("LLKeyboard::bindKey() - unknown mode passed", mode); + llerrs << "LLKeyboard::bindKey() - unknown mode passed" << mode << llendl; return FALSE; } mBindings[mode][index].mKey = key; mBindings[mode][index].mMask = mask; -// mBindings[mode][index].mName = name; mBindings[mode][index].mFunction = function; if (index == mBindingCount[mode]) @@ -911,18 +911,18 @@ void LLViewerKeyboard::scanKey(KEY key, BOOL key_down, BOOL key_up, BOOL key_lev if (key_down && !repeat) { // ...key went down this frame, call function - (*binding[i].mFunction)( KEYSTATE_DOWN ); + binding[i].mFunction( KEYSTATE_DOWN ); } else if (key_up) { // ...key went down this frame, call function - (*binding[i].mFunction)( KEYSTATE_UP ); + binding[i].mFunction( KEYSTATE_UP ); } else if (key_level) { // ...key held down from previous frame // Not windows, just call the function. - (*binding[i].mFunction)( KEYSTATE_LEVEL ); + binding[i].mFunction( KEYSTATE_LEVEL ); }//if }//if }//for diff --git a/indra/newview/llviewerkeyboard.h b/indra/newview/llviewerkeyboard.h index 56a31b18d..1893b6aee 100644 --- a/indra/newview/llviewerkeyboard.h +++ b/indra/newview/llviewerkeyboard.h @@ -61,7 +61,6 @@ typedef enum e_keyboard_mode void bind_keyboard_functions(); - class LLViewerKeyboard { public: @@ -69,10 +68,8 @@ public: BOOL handleKey(KEY key, MASK mask, BOOL repeated); - void bindNamedFunction(const std::string& name, LLKeyFunc func); - S32 loadBindings(const std::string& filename); // returns number bound, 0 on error - void unloadBindings(); + void unloadBindings(); EKeyboardMode getMode(); BOOL modeFromString(const std::string& string, S32 *mode); // False on failure @@ -80,8 +77,6 @@ public: void scanKey(KEY key, BOOL key_down, BOOL key_up, BOOL key_level); protected: BOOL bindKey(const S32 mode, const KEY key, const MASK mask, const std::string& function_name); - S32 mNamedFunctionCount; - LLNamedFunction mNamedFunctions[MAX_NAMED_FUNCTIONS]; // Hold all the ugly stuff torn out to make LLKeyboard non-viewer-specific here S32 mBindingCount[MODE_COUNT]; @@ -95,4 +90,5 @@ protected: extern LLViewerKeyboard gViewerKeyboard; void agent_push_forward(EKeystate s); + #endif // LL_LLVIEWERKEYBOARD_H diff --git a/indra/newview/llviewermenu.cpp b/indra/newview/llviewermenu.cpp index fd3346160..2961a1745 100644 --- a/indra/newview/llviewermenu.cpp +++ b/indra/newview/llviewermenu.cpp @@ -755,7 +755,7 @@ void init_menus() ins = gMenuBarView->getChildView("insert_admin", true, false); ins->setVisible(false);*/ - LLEnvManagerNew::instance().setRegionChangeCallback(®ion_change); + gAgent.addRegionChangedCallback(®ion_change); } @@ -3981,17 +3981,7 @@ class LLWorldEnableFly : public view_listener_t { bool handleEvent(LLPointer event, const LLSD& userdata) { - BOOL sitting = FALSE; - static LLCachedControl continue_flying_on_unsit("LiruContinueFlyingOnUnsit"); - if (continue_flying_on_unsit) - { - sitting = false; - } - else if (gAgentAvatarp) - { - sitting = gAgentAvatarp->isSitting(); - } - gMenuHolder->findControl(userdata["control"].asString())->setValue(!sitting); + gMenuHolder->findControl(userdata["control"].asString())->setValue(gAgent.enableFlying()); return true; } }; @@ -9062,7 +9052,7 @@ class ListInviteToGroup : public view_listener_t { bool handleEvent(LLPointer event, const LLSD& userdata) { - LLAvatarActions::inviteToGroup(get_focused_list_id_selected()); + LLAvatarActions::inviteToGroup(get_focused_list_ids_selected()); return true; } }; diff --git a/indra/newview/llviewermessage.cpp b/indra/newview/llviewermessage.cpp index c7c8ebfef..079d8acd0 100644 --- a/indra/newview/llviewermessage.cpp +++ b/indra/newview/llviewermessage.cpp @@ -657,13 +657,14 @@ bool join_group_response(const LLSD& notification, const LLSD& response) LLNotificationsUtil::add("JoinGroup", args, notification["payload"]); return false; } + if(option == 0 && !group_id.isNull()) { // check for promotion or demotion. S32 max_groups = gHippoLimits->getMaxAgentGroups(); if(gAgent.isInGroup(group_id)) ++max_groups; - if(gAgent.mGroups.count() < max_groups) + if((S32)gAgent.mGroups.size() < max_groups) { accept_invite = true; } @@ -2463,8 +2464,8 @@ void process_improved_im(LLMessageSystem *msg, void **user_data) LLGiveInventory::doGiveInventoryItem(from_id, item, computed_session_id); if (show_autoresponded) { - gIMMgr->addMessage(computed_session_id, from_id, name, - llformat("%s %s \"%s\"", pns_name.c_str(), LLTrans::getString("IM_autoresponse_sent_item").c_str(), item->getName().c_str())); + gIMMgr->addMessage(computed_session_id, from_id, name, + llformat("%s %s \"%s\"", pns_name.c_str(), LLTrans::getString("IM_autoresponse_sent_item").c_str(), item->getName().c_str())); } } } @@ -2635,7 +2636,7 @@ void process_improved_im(LLMessageSystem *msg, void **user_data) if (show_autoresponded) { gIMMgr->addMessage(computed_session_id, from_id, name, - llformat("%s %s \"%s\"", pns_name.c_str(), LLTrans::getString("IM_autoresponse_sent_item").c_str(), item->getName().c_str())); + llformat("%s %s \"%s\"", pns_name.c_str(), LLTrans::getString("IM_autoresponse_sent_item").c_str(), item->getName().c_str())); } } } diff --git a/indra/newview/llviewerregion.cpp b/indra/newview/llviewerregion.cpp index cbc64d533..799513e93 100644 --- a/indra/newview/llviewerregion.cpp +++ b/indra/newview/llviewerregion.cpp @@ -358,6 +358,10 @@ LLViewerRegion::LLViewerRegion(const U64 &handle, // Create the object lists initStats(); initPartitions(); + // If the newly entered region is using server bakes, and our + // current appearance is non-baked, request appearance update from + // server. + setCapabilitiesReceivedCallback(boost::bind(&LLAgent::handleServerBakeRegionTransition, &gAgent, _1)); // Singu TODO: LLAvatarRenderInfoAccountant } void LLViewerRegion::initPartitions() diff --git a/indra/newview/llviewerwindow.cpp b/indra/newview/llviewerwindow.cpp index 8663e82b7..ec0ccde2c 100644 --- a/indra/newview/llviewerwindow.cpp +++ b/indra/newview/llviewerwindow.cpp @@ -2399,6 +2399,7 @@ void LLViewerWindow::reshape(S32 width, S32 height) // Inform lower views of the change // round up when converting coordinates to make sure there are no gaps at edge of window LLView::sForceReshape = display_scale_changed; + if (/*display_scale_changed && */gSavedSettings.getBOOL("LiruResizeRootWithScreen")) // Singu Note: Nasty hack to keep floaters from repositioning on window resize. mRootView->reshape(llceil((F32)width / mDisplayScale.mV[VX]), llceil((F32)height / mDisplayScale.mV[VY])); LLView::sForceReshape = FALSE; diff --git a/indra/newview/llvoavatar.cpp b/indra/newview/llvoavatar.cpp index 2e5e1d7e9..c7dc7827d 100644 --- a/indra/newview/llvoavatar.cpp +++ b/indra/newview/llvoavatar.cpp @@ -111,7 +111,6 @@ #include "llsdutil.h" #include "llfloaterexploreanimations.h" -#include "aihttptimeoutpolicy.h" #include "aixmllindengenepool.h" #include "aifile.h" @@ -5033,7 +5032,7 @@ void LLVOAvatar::bakedTextureOriginCounts(S32 &sb_count, // server-bake, has ori std::string LLVOAvatar::bakedTextureOriginInfo() { std::string result; - + std::set baked_ids; collectBakedTextureUUIDs(baked_ids); for (std::set::const_iterator it = baked_ids.begin(); it != baked_ids.end(); ++it) @@ -5048,11 +5047,17 @@ std::string LLVOAvatar::bakedTextureOriginInfo() { has_host = true; } - if (has_url && !has_host) result += "u"; // server-bake texture with url - else if (has_host && !has_url) result += "h"; // old-style texture on sim - else if (has_host && has_url) result += "?"; // both origins? - else if (!has_host && !has_url) result += "n"; // no origin? + S32 discard = imagep->getDiscardLevel(); + if (has_url && !has_host) result += discard ? "u" : "U"; // server-bake texture with url + else if (has_host && !has_url) result += discard ? "h" : "H"; // old-style texture on sim + else if (has_host && has_url) result += discard ? "x" : "X"; // both origins? + else if (!has_host && !has_url) result += discard ? "n" : "N"; // no origin? + if (discard != 0) + { + result += llformat("(%d/%d)",discard,imagep->getDesiredDiscardLevel()); + } } + return result; } @@ -5177,7 +5182,7 @@ void LLVOAvatar::updateTextures() BOOL render_avatar = TRUE; - if (mIsDummy || gNoRender) + if (mIsDummy) { return; } @@ -5197,6 +5202,7 @@ void LLVOAvatar::updateTextures() } std::vector layer_baked; + // GL NOT ACTIVE HERE - *TODO for (U32 i = 0; i < mBakedTextureDatas.size(); i++) { layer_baked.push_back(isTextureDefined(mBakedTextureDatas[i].mTextureIndex)); @@ -5401,7 +5407,7 @@ const std::string LLVOAvatar::getImageURL(const U8 te, const LLUUID &uuid) std::string url = ""; if (isUsingServerBakes()) { - const std::string& appearance_service_url = gSavedSettings.getString("AgentAppearanceServiceURL"); + const std::string& appearance_service_url = LLAppearanceMgr::instance().getAppearanceServiceURL(); if (appearance_service_url.empty()) { // Probably a server-side issue if we get here: @@ -5488,8 +5494,6 @@ const LLUUID& LLVOAvatar::getStepSound() const //----------------------------------------------------------------------------- void LLVOAvatar::processAnimationStateChanges() { - if (gNoRender) return; - if ( isAnyAnimationSignaled(AGENT_WALK_ANIMS, NUM_AGENT_WALK_ANIMS) ) { startMotion(ANIM_AGENT_WALK_ADJUST); @@ -5518,7 +5522,7 @@ void LLVOAvatar::processAnimationStateChanges() } // clear all current animations - BOOL const AOEnabled = gSavedSettings.getBOOL("AOEnabled"); // Singu note: put this outside the loop. + const bool AOEnabled(gSavedSettings.getBOOL("AOEnabled")); // AnimIterator anim_it; for (anim_it = mPlayingAnimations.begin(); anim_it != mPlayingAnimations.end();) { @@ -5527,14 +5531,8 @@ void LLVOAvatar::processAnimationStateChanges() // playing, but not signaled, so stop if (found_anim == mSignaledAnimations.end()) { - if (AOEnabled && isSelf()) - { - if (LLFloaterAO::stopMotion(anim_it->first, FALSE)) // if the AO replaced this anim serverside then stop it serverside - { -// return TRUE; //no local stop needed - } - } + LLFloaterAO::stopMotion(anim_it->first, FALSE); // if the AO replaced this anim serverside then stop it serverside processSingleAnimationStateChange(anim_it->first, FALSE); // @@ -5877,29 +5875,6 @@ LLJoint *LLVOAvatar::getJoint( const std::string &name ) return jointp; } - -//----------------------------------------------------------------------------- -// resetSpecificJointPosition -//----------------------------------------------------------------------------- -void LLVOAvatar::resetSpecificJointPosition( const std::string& name ) -{ - LLJoint* pJoint = mRoot->findJoint( name ); - - if ( pJoint && pJoint->doesJointNeedToBeReset() ) - { - pJoint->restoreOldXform(); - pJoint->setId( LLUUID::null ); - //If we're reseting the pelvis position make sure not to apply offset - if ( name == "mPelvis" ) - { - mHasPelvisOffset = false; - } - } - else - { - llinfos<<"Did not find "<< name.c_str()<doesJointNeedToBeReset() ) + //Reset joints except for pelvis + if ( pJoint && pJoint != pJointPelvis && pJoint->doesJointNeedToBeReset() ) { pJoint->setId( LLUUID::null ); - //restore joints to default positions, however skip over the pelvis - // *TODO: How does this pointer check skip over pelvis? - if ( pJoint ) - { - pJoint->restoreOldXform(); - } + pJoint->restoreOldXform(); + } + else + if ( pJoint && pJoint == pJointPelvis && pJoint->doesJointNeedToBeReset() ) + { + pJoint->setId( LLUUID::null ); + pJoint->setPosition( LLVector3( 0.0f, 0.0f, 0.0f) ); + //pJoint->setJointResetFlag( false ); // Singu TODO } } + //make sure we don't apply the joint offset mHasPelvisOffset = false; mPelvisFixup = mLastPelvisFixup; @@ -5977,7 +5959,7 @@ void LLVOAvatar::getGround(const LLVector3 &in_pos_agent, LLVector3 &out_pos_age LLVector3d z_vec(0.0f, 0.0f, 1.0f); LLVector3d p0_global, p1_global; - if (gNoRender || mIsDummy) + if (mIsDummy) { outNorm.setVec(z_vec); out_pos_agent = in_pos_agent; @@ -6136,11 +6118,6 @@ BOOL LLVOAvatar::loadSkeletonNode () //----------------------------------------------------------------------------- void LLVOAvatar::updateVisualParams() { - if (gNoRender) - { - return; - } - setSex( (getVisualParamWeight( "male" ) > 0.5f) ? SEX_MALE : SEX_FEMALE ); LLCharacter::updateVisualParams(); @@ -6155,7 +6132,6 @@ void LLVOAvatar::updateVisualParams() dirtyMesh(); updateHeadOffset(); } - //----------------------------------------------------------------------------- // isActive() //----------------------------------------------------------------------------- @@ -6214,7 +6190,6 @@ BOOL LLVOAvatar::updateJointLODs() F32 avatar_num_factor = clamp_rescale((F32)sNumVisibleAvatars, 8, 25, 1.f, avatar_num_min_factor); F32 area_scale = 0.16f; - { if (isSelf()) { if(gAgentCamera.cameraCustomizeAvatar() || gAgentCamera.cameraMouselook()) @@ -6249,7 +6224,6 @@ BOOL LLVOAvatar::updateJointLODs() dirtyMesh(2); return TRUE; } - } return FALSE; } @@ -6378,19 +6352,18 @@ void LLVOAvatar::addChild(LLViewerObject *childp) LLViewerObject::addChild(childp); if (childp->mDrawable) { - if(isSelf()) + if (!attachObject(childp)) { - LL_INFOS("Attachment") << childp->getID() << " ("<getAttachmentPointName()<<") attached." << llendl; - llassert(std::find(mPendingAttachment.begin(), mPendingAttachment.end(), childp) == mPendingAttachment.end()); + llwarns << "addChild() failed for " + << childp->getID() + << " item " << childp->getAttachmentItemID() + << llendl; + // MAINT-3312 backout + // mPendingAttachment.push_back(childp); } - attachObject(childp); } else { - if(isSelf()) - { - LL_INFOS("Attachment") << childp->getID() << " ("<getAttachmentPointName()<<") pending." << llendl; - } mPendingAttachment.push_back(childp); } } @@ -6519,17 +6492,22 @@ void LLVOAvatar::lazyAttach() for (U32 i = 0; i < mPendingAttachment.size(); i++) { - if (mPendingAttachment[i]->mDrawable) + LLPointer cur_attachment = mPendingAttachment[i]; + if (cur_attachment->mDrawable) { - if(isSelf()) - { - LL_INFOS("Attachment") << mPendingAttachment[i]->getID() << " ("<getAttachmentPointName()<<") done pending. attached." << llendl; + if(!attachObject(cur_attachment)) + { // Drop it + llwarns << "attachObject() failed for " + << cur_attachment->getID() + << " item " << cur_attachment->getAttachmentItemID() + << llendl; + // MAINT-3312 backout + //still_pending.push_back(cur_attachment); } - attachObject(mPendingAttachment[i]); } else { - still_pending.push_back(mPendingAttachment[i]); + still_pending.push_back(cur_attachment); } } @@ -6538,6 +6516,7 @@ void LLVOAvatar::lazyAttach() void LLVOAvatar::resetHUDAttachments() { + for (attachment_map_t::iterator iter = mAttachmentPoints.begin(); iter != mAttachmentPoints.end(); ++iter) @@ -6612,6 +6591,7 @@ void LLVOAvatar::cleanupAttachedMesh( LLViewerObject* pVO ) //----------------------------------------------------------------------------- BOOL LLVOAvatar::detachObject(LLViewerObject *viewer_object) { + for (attachment_map_t::iterator iter = mAttachmentPoints.begin(); iter != mAttachmentPoints.end(); ++iter) @@ -6623,6 +6603,7 @@ BOOL LLVOAvatar::detachObject(LLViewerObject *viewer_object) vector_replace_with_last(mAttachedObjectsVector,std::make_pair(viewer_object,attachment)); cleanupAttachedMesh( viewer_object ); + attachment->removeObject(viewer_object); lldebugs << "Detaching object " << viewer_object->mID << " from " << attachment->getName() << llendl; return TRUE; @@ -7037,9 +7018,12 @@ void LLVOAvatar::clearPhases() void LLVOAvatar::startPhase(const std::string& phase_name) { - F32 elapsed; - bool completed; - if (getPhases().getPhaseValues(phase_name, elapsed, completed)) + F32 elapsed = 0.0; + bool completed = false; + bool found = getPhases().getPhaseValues(phase_name, elapsed, completed); + //LL_DEBUGS("Avatar") << avString() << " phase state " << phase_name + // << " found " << found << " elapsed " << elapsed << " completed " << completed << LL_ENDL; + if (found) { if (!completed) { @@ -7053,8 +7037,8 @@ void LLVOAvatar::startPhase(const std::string& phase_name) void LLVOAvatar::stopPhase(const std::string& phase_name, bool err_check) { - F32 elapsed; - bool completed; + F32 elapsed = 0.0; + bool completed = false; if (getPhases().getPhaseValues(phase_name, elapsed, completed)) { if (!completed) @@ -7240,8 +7224,8 @@ BOOL LLVOAvatar::isFullyLoaded() const bool LLVOAvatar::isTooComplex() const { - static const LLCachedControl render_avatar_complexity_limit("RenderAvatarComplexityLimit",0); - if (render_avatar_complexity_limit > 0 && mVisualComplexity >= render_avatar_complexity_limit) + static LLCachedControl ava_complexity_limit(gSavedSettings, "RenderAvatarComplexityLimit"); + if (ava_complexity_limit > 0 && mVisualComplexity >= ava_complexity_limit) { return true; } @@ -7262,7 +7246,8 @@ LLMotion* LLVOAvatar::findMotion(const LLUUID& id) const // colorized if using deferred rendering. void LLVOAvatar::debugColorizeSubMeshes(U32 i, const LLColor4& color) { - if (gSavedSettings.getBOOL("DebugAvatarCompositeBaked")) + static LLCachedControl debug_avatar_comp_baked(gSavedSettings, "DebugAvatarCompositeBaked"); + if (debug_avatar_comp_baked) { avatar_joint_mesh_list_t::iterator iter = mBakedTextureDatas[i].mJointMeshes.begin(); avatar_joint_mesh_list_t::iterator end = mBakedTextureDatas[i].mJointMeshes.end(); @@ -7278,6 +7263,7 @@ void LLVOAvatar::debugColorizeSubMeshes(U32 i, const LLColor4& color) } } } + //----------------------------------------------------------------------------- // updateMeshTextures() // Uses the current TE values to set the meshes' and layersets' textures. @@ -7592,7 +7578,6 @@ void LLVOAvatar::applyMorphMask(U8* tex_data, S32 width, S32 height, S32 num_com } } - // returns TRUE if morph masks are present and not valid for a given baked texture, FALSE otherwise BOOL LLVOAvatar::morphMaskNeedsUpdate(LLAvatarAppearanceDefines::EBakedTextureIndex index) { @@ -7775,7 +7760,7 @@ LLBBox LLVOAvatar::getHUDBBox() const //----------------------------------------------------------------------------- void LLVOAvatar::onFirstTEMessageReceived() { - LL_INFOS("Avatar") << avString() << LL_ENDL; + LL_DEBUGS("Avatar") << avString() << LL_ENDL; if( !mFirstTEMessageReceived ) { mFirstTEMessageReceived = TRUE; @@ -8017,13 +8002,13 @@ bool resolve_appearance_version(const LLAppearanceMessageContents& contents, S32 { appearance_version = contents.mParamAppearanceVersion; } - if (contents.mAppearanceVersion >= 0) + else if (contents.mAppearanceVersion > 0) { appearance_version = contents.mAppearanceVersion; } - if (appearance_version < 0) // still not set, go with 0. + else // still not set, go with 1. { - appearance_version = 0; + appearance_version = 1; } LL_DEBUGS("Avatar") << "appearance version info - field " << contents.mAppearanceVersion << " param: " << contents.mParamAppearanceVersion @@ -8061,6 +8046,7 @@ void LLVOAvatar::processAvatarAppearance( LLMessageSystem* mesgsys ) llwarns << "bad appearance version info, discarding" << llendl; return; } + S32 this_update_cof_version = contents.mCOFVersion; S32 last_update_request_cof_version = LLAppearanceMgr::instance().mLastUpdateRequestCOFVersion; @@ -8108,6 +8094,7 @@ void LLVOAvatar::processAvatarAppearance( LLMessageSystem* mesgsys ) return; } + // SUNSHINE CLEANUP - is this case OK now? S32 num_params = contents.mParamWeights.size(); if (num_params <= 1) { @@ -8132,9 +8119,15 @@ void LLVOAvatar::processAvatarAppearance( LLMessageSystem* mesgsys ) && mBakedTextureDatas[baked_index].mLastTextureID != IMG_DEFAULT && baked_index != BAKED_SKIRT) { + LL_DEBUGS("Avatar") << avString() << " baked_index " << (S32) baked_index << " using mLastTextureID " << mBakedTextureDatas[baked_index].mLastTextureID << LL_ENDL; setTEImage(mBakedTextureDatas[baked_index].mTextureIndex, LLViewerTextureManager::getFetchedTexture(mBakedTextureDatas[baked_index].mLastTextureID, TRUE, LLGLTexture::BOOST_NONE, LLViewerTexture::LOD_TEXTURE)); } + else + { + LL_DEBUGS("Avatar") << avString() << " baked_index " << (S32) baked_index << " using texture id " + << getTE(mBakedTextureDatas[baked_index].mTextureIndex)->getID() << LL_ENDL; + } } // runway - was @@ -8162,6 +8155,7 @@ void LLVOAvatar::processAvatarAppearance( LLMessageSystem* mesgsys ) LL_DEBUGS("Avatar") << avString() << " handle visual params, num_params " << num_params << LL_ENDL; BOOL params_changed = FALSE; BOOL interp_params = FALSE; + S32 params_changed_count = 0; for( S32 i = 0; i < num_params; i++ ) { @@ -8176,8 +8170,11 @@ void LLVOAvatar::processAvatarAppearance( LLMessageSystem* mesgsys ) if (is_first_appearance_message || (param->getWeight() != newWeight)) { params_changed = TRUE; + params_changed_count++; + if(is_first_appearance_message) { + //LL_DEBUGS("Avatar") << "param slam " << i << " " << newWeight << LL_ENDL; param->setWeight(newWeight, FALSE); } else @@ -8193,6 +8190,7 @@ void LLVOAvatar::processAvatarAppearance( LLMessageSystem* mesgsys ) LL_DEBUGS("Avatar") << "Number of params in AvatarAppearance msg (" << num_params << ") does not match number of tweakable params in avatar xml file (" << expected_tweakable_count << "). Processing what we can. object: " << getID() << LL_ENDL; } + LL_DEBUGS("Avatar") << "Changed " << params_changed_count << " params" << LL_ENDL; if (params_changed) { if (interp_params) @@ -8242,35 +8240,36 @@ void LLVOAvatar::processAvatarAppearance( LLMessageSystem* mesgsys ) } updateMeshTextures(); - //if (enable_verbose_dumps) dumpArchetypeXML(dump_prefix + "process_end"); } // static -void LLVOAvatar::getAnimLabels( LLDynamicArray* labels ) +void LLVOAvatar::getAnimLabels( std::vector* labels ) { S32 i; + labels->reserve(gUserAnimStatesCount); for( i = 0; i < gUserAnimStatesCount; i++ ) { - labels->put( LLAnimStateLabels::getStateLabel( gUserAnimStates[i].mName ) ); + labels->push_back( LLAnimStateLabels::getStateLabel( gUserAnimStates[i].mName ) ); } // Special case to trigger away (AFK) state - labels->put( "Away From Keyboard" ); + labels->push_back( "Away From Keyboard" ); } // static -void LLVOAvatar::getAnimNames( LLDynamicArray* names ) +void LLVOAvatar::getAnimNames( std::vector* names ) { S32 i; + names->reserve(gUserAnimStatesCount); for( i = 0; i < gUserAnimStatesCount; i++ ) { - names->put( std::string(gUserAnimStates[i].mName) ); + names->push_back( std::string(gUserAnimStates[i].mName) ); } // Special case to trigger away (AFK) state - names->put( "enter_away_from_keyboard_state" ); + names->push_back( "enter_away_from_keyboard_state" ); } // static @@ -8423,7 +8422,7 @@ void LLVOAvatar::useBakedTexture( const LLUUID& id ) LLViewerTexture* image_baked = getImage( mBakedTextureDatas[i].mTextureIndex, 0 ); if (id == image_baked->getID()) { - LL_DEBUGS("Avatar") << avString() << " i " << i << " id " << id << LL_ENDL; + //LL_DEBUGS("Avatar") << avString() << " i " << i << " id " << id << LL_ENDL; mBakedTextureDatas[i].mIsLoaded = true; mBakedTextureDatas[i].mLastTextureID = id; mBakedTextureDatas[i].mIsUsed = true; @@ -8496,6 +8495,15 @@ std::string get_sequential_numbered_file_name(const std::string& prefix, return outfilename; } +void dump_sequential_xml(const std::string outprefix, const LLSD& content) +{ + std::string outfilename = get_sequential_numbered_file_name(outprefix,".xml"); + std::string fullpath = gDirUtilp->getExpandedFilename(LL_PATH_LOGS,outfilename); + std::ofstream ofs(fullpath.c_str(), std::ios_base::out); + ofs << LLSDOStreamer(content, LLSDFormatter::OPTIONS_PRETTY); + LL_DEBUGS("Avatar") << "results saved to: " << fullpath << LL_ENDL; +} + void LLVOAvatar::dumpArchetypeXML(const std::string& prefix, bool group_by_wearables ) { std::string outprefix(prefix); diff --git a/indra/newview/llvoavatar.h b/indra/newview/llvoavatar.h index b0bc08ab3..6dd1f0b71 100644 --- a/indra/newview/llvoavatar.h +++ b/indra/newview/llvoavatar.h @@ -250,7 +250,6 @@ public: virtual LLJoint* getJoint(const std::string &name); void resetJointPositionsToDefault( void ); - void resetSpecificJointPosition( const std::string& name ); /*virtual*/ const LLUUID& getID() const; /*virtual*/ void addDebugText(const std::string& text); @@ -916,11 +915,11 @@ private: **/ public: - /*virtual*/ std::string getFullname() const; // Returns "FirstName LastName" + std::string getFullname() const; // Returns "FirstName LastName" std::string avString() const; // Frequently used string in log messages "Avatar '* labels); - static void getAnimNames(LLDynamicArray* names); + static void getAnimLabels(std::vector* labels); + static void getAnimNames(std::vector* names); private: std::string mNameString; // UTF-8 title + name + status std::string mTitle; @@ -1074,8 +1073,10 @@ private: // }; // LLVOAvatar - extern const F32 SELF_ADDITIONAL_PRI; extern const S32 MAX_TEXTURE_VIRTUAL_SIZE_RESET_INTERVAL; +void dump_sequential_xml(const std::string outprefix, const LLSD& content); + #endif // LL_VOAVATAR_H + diff --git a/indra/newview/llvoavatarself.cpp b/indra/newview/llvoavatarself.cpp index f5cf396c3..c77914e36 100644 --- a/indra/newview/llvoavatarself.cpp +++ b/indra/newview/llvoavatarself.cpp @@ -620,12 +620,21 @@ void LLVOAvatarSelf::idleUpdate(LLAgent &agent, LLWorld &world, const F64 &time) // virtual LLJoint *LLVOAvatarSelf::getJoint(const std::string &name) { - if (mScreenp) + // - findJoint Opt + LLJoint* jointp = LLVOAvatar::getJoint(name); + if (!jointp && mScreenp) { - LLJoint* jointp = mScreenp->findJoint(name); - if (jointp) return jointp; + jointp = mScreenp->findJoint(name); } - return LLVOAvatar::getJoint(name); + return jointp; + + // + //if (mScreenp) + //{ + // LLJoint* jointp = mScreenp->findJoint(name); + // if (jointp) return jointp; + //} + //return LLVOAvatar::getJoint(name); } // virtual BOOL LLVOAvatarSelf::setVisualParamWeight(const LLVisualParam *which_param, F32 weight, BOOL upload_bake ) @@ -663,14 +672,6 @@ BOOL LLVOAvatarSelf::setParamWeight(const LLViewerVisualParam *param, F32 weight return FALSE; } -#if 0 - // FIXME DRANO - kludgy way to avoid overwriting avatar state from wearables. - if (isUsingServerBakes() && !isUsingLocalAppearance()) - { - return FALSE; - } -#endif - if (param->getCrossWearable()) { LLWearableType::EType type = (LLWearableType::EType)param->getWearableType(); @@ -741,50 +742,9 @@ void LLVOAvatarSelf::stopMotionFromSource(const LLUUID& source_id) } //virtual -U32 LLVOAvatarSelf::processUpdateMessage(LLMessageSystem *mesgsys, - void **user_data, - U32 block_num, - const EObjectUpdateType update_type, - LLDataPacker *dp) +U32 LLVOAvatarSelf::processUpdateMessage(LLMessageSystem *mesgsys, void **user_data, U32 block_num, const EObjectUpdateType update_type, LLDataPacker *dp) { - U32 retval = LLVOAvatar::processUpdateMessage(mesgsys,user_data,block_num,update_type,dp); - -#if 0 - // DRANO - it's not clear this does anything useful. If we wait - // until an appearance message has been received, we already have - // the texture ids. If we don't wait, we don't yet know where to - // look for baked textures, because we haven't received the - // appearance version data from the appearance message. This looks - // like an old optimization that's incompatible with server-side - // texture baking. - - // FIXME DRANO - skipping in the case of !mFirstAppearanceMessageReceived prevents us from trying to - // load textures before we know where they come from (ie, from baking service or not); - // unknown impact on performance. - if (mInitialBakesLoaded == false && retval == 0x0 && mFirstAppearanceMessageReceived) - { - // call update textures to force the images to be created - updateMeshTextures(); - - // unpack the texture UUIDs to the texture slots - retval = unpackTEMessage(mesgsys, _PREHASH_ObjectData, (S32) block_num); - - // need to trigger a few operations to get the avatar to use the new bakes - for (U32 i = 0; i < mBakedTextureDatas.size(); i++) - { - const LLAvatarAppearanceDefines::ETextureIndex te = mBakedTextureDatas[i].mTextureIndex; - LLUUID texture_id = getTEImage(te)->getID(); - setNewBakedTexture(te, texture_id); - mInitialBakeIDs[i] = texture_id; - } - - onFirstTEMessageReceived(); - - mInitialBakesLoaded = true; - } -#endif - - return retval; + return LLVOAvatar::processUpdateMessage(mesgsys, user_data, block_num, update_type, dp); } void LLVOAvatarSelf::setLocalTextureTE(U8 te, LLViewerTexture* image, U32 index) @@ -824,7 +784,7 @@ void LLVOAvatarSelf::removeMissingBakedTextures() if (!tex || tex->isMissingAsset()) { LLViewerTexture *imagep = LLViewerTextureManager::getFetchedTexture(IMG_DEFAULT_AVATAR); - if (imagep) + if (imagep && imagep != tex) { setTEImage(te, imagep); removed = TRUE; @@ -863,9 +823,9 @@ void LLVOAvatarSelf::updateRegion(LLViewerRegion *regionp) // Diagnostic info //LLVector3d pos_from_new_region = getPositionGlobal(); - //llinfos << "pos_from_old_region is " << global_pos_from_old_region + //LL_INFOS() << "pos_from_old_region is " << global_pos_from_old_region // << " while pos_from_new_region is " << pos_from_new_region - // << llendl; + // << LL_ENDL; } if (!regionp || (regionp->getHandle() != mLastRegionHandle)) @@ -971,7 +931,6 @@ void LLVOAvatarSelf::idleUpdateTractorBeam() mBeam->setPositionGlobal(pick.mPosGlobal); } - } if (mBeamTimer.getElapsedTimeF32() > 0.25f) { @@ -988,7 +947,7 @@ void LLVOAvatarSelf::idleUpdateTractorBeam() // virtual void LLVOAvatarSelf::restoreMeshData() { - //llinfos << "Restoring" << llendl; + //LL_INFOS() << "Restoring" << LL_ENDL; mMeshValid = TRUE; updateJointLODs(); updateAttachmentVisibility(gAgentCamera.getCameraMode()); @@ -1069,13 +1028,13 @@ void LLVOAvatarSelf::wearableUpdated( LLWearableType::EType type, BOOL upload_re } } } - + // Physics type has no associated baked textures, but change of params needs to be sent to // other avatars. if (type == LLWearableType::WT_PHYSICS) - { - gAgent.sendAgentSetAppearance(); - } + { + gAgent.sendAgentSetAppearance(); + } } //----------------------------------------------------------------------------- @@ -1492,7 +1451,7 @@ BOOL LLVOAvatarSelf::isLocalTextureDataAvailable(const LLViewerTexLayerSet* laye //----------------------------------------------------------------------------- BOOL LLVOAvatarSelf::isLocalTextureDataFinal(const LLViewerTexLayerSet* layerset) const { - const U32 desired_tex_discard_level = gSavedSettings.getU32("TextureDiscardLevel"); + static LLCachedControl desired_tex_discard_level(gSavedSettings, "TextureDiscardLevel"); // const U32 desired_tex_discard_level = 0; // hack to not bake textures on lower discard levels. for (U32 i = 0; i < mBakedTextureDatas.size(); i++) @@ -1527,7 +1486,7 @@ BOOL LLVOAvatarSelf::isLocalTextureDataFinal(const LLViewerTexLayerSet* layerset BOOL LLVOAvatarSelf::isAllLocalTextureDataFinal() const { - const U32 desired_tex_discard_level = gSavedSettings.getU32("TextureDiscardLevel"); + static LLCachedControl desired_tex_discard_level(gSavedSettings, "TextureDiscardLevel"); // const U32 desired_tex_discard_level = 0; // hack to not bake textures on lower discard levels for (U32 i = 0; i < mBakedTextureDatas.size(); i++) @@ -1669,7 +1628,7 @@ void LLVOAvatarSelf::invalidateComposite( LLTexLayerSet* layerset, BOOL upload_r { return; } - // llinfos << "LLVOAvatar::invalidComposite() " << layerset->getBodyRegionName() << llendl; + // LL_INFOS() << "LLVOAvatar::invalidComposite() " << layerset->getBodyRegionName() << LL_ENDL; layer_set->requestUpdate(); layer_set->invalidateMorphMasks(); @@ -2101,7 +2060,10 @@ BOOL LLVOAvatarSelf::getIsCloud() const /*static*/ void LLVOAvatarSelf::debugOnTimingLocalTexLoaded(BOOL success, LLViewerFetchedTexture *src_vi, LLImageRaw* src, LLImageRaw* aux_src, S32 discard_level, BOOL final, void* userdata) { - gAgentAvatarp->debugTimingLocalTexLoaded(success, src_vi, src, aux_src, discard_level, final, userdata); + if (gAgentAvatarp.notNull()) + { + gAgentAvatarp->debugTimingLocalTexLoaded(success, src_vi, src, aux_src, discard_level, final, userdata); + } } void LLVOAvatarSelf::debugTimingLocalTexLoaded(BOOL success, LLViewerFetchedTexture *src_vi, LLImageRaw* src, LLImageRaw* aux_src, S32 discard_level, BOOL final, void* userdata) @@ -2214,7 +2176,7 @@ void LLVOAvatarSelf::dumpAllTextures() const if (!layerset_buffer) continue; vd_text += verboseDebugDumpLocalTextureDataInfo(layerset); } - LL_DEBUGS("Avatar") << vd_text << llendl; + LL_DEBUGS("Avatar") << vd_text << LL_ENDL; } const std::string LLVOAvatarSelf::debugDumpLocalTextureDataInfo(const LLViewerTexLayerSet* layerset) const @@ -2285,28 +2247,9 @@ const std::string LLVOAvatarSelf::debugDumpAllLocalTextureDataInfo() const return text; } - -#if 0 -// Dump avatar metrics data. -LLSD LLVOAvatarSelf::metricsData() -{ - // runway - add region info - LLSD result; - result["rez_status"] = LLVOAvatar::rezStatusToString(getRezzedStatus()); - result["timers"]["debug_existence"] = mDebugExistenceTimer.getElapsedTimeF32(); - result["timers"]["ruth_debug"] = mRuthDebugTimer.getElapsedTimeF32(); - result["timers"]["ruth"] = mRuthTimer.getElapsedTimeF32(); - result["timers"]["invisible"] = mInvisibleTimer.getElapsedTimeF32(); - result["timers"]["fully_loaded"] = mFullyLoadedTimer.getElapsedTimeF32(); - result["startup"] = LLStartUp::getPhases().dumpPhases(); - - return result; -} -#endif - -extern AIHTTPTimeoutPolicy appearanceChangeMetricsResponder_timeout; class ViewerAppearanceChangeMetricsResponder: public LLHTTPClient::ResponderWithResult { + LOG_CLASS(ViewerAppearanceChangeMetricsResponder); public: ViewerAppearanceChangeMetricsResponder( S32 expected_sequence, volatile const S32 & live_sequence, @@ -2317,7 +2260,8 @@ public: { } - /*virtual*/ void httpSuccess(void) +private: + /* virtual */ void httpSuccess() { LL_DEBUGS("Avatar") << "OK" << LL_ENDL; if (mLiveSequence == mExpectedSequence) @@ -2325,11 +2269,12 @@ public: mReportingStarted = true; } } - /*virtual*/ void httpFailure(void) + + /* virtual */ void httpFailure() { - LL_WARNS("Avatar") << "Failed " << mStatus << " reason " << mReason << LL_ENDL; + // if we add retry, this should be removed from the httpFailure case + LL_WARNS("Avatar") << dumpResponse() << LL_ENDL; } - /*virtual*/ AIHTTPTimeoutPolicy const& getHTTPTimeoutPolicy(void) const { return appearanceChangeMetricsResponder_timeout; } /*virtual*/ char const* getName(void) const { return "AppearanceChangeMetricsResponder"; } private: S32 mExpectedSequence; @@ -2481,19 +2426,14 @@ void LLVOAvatarSelf::sendViewerAppearanceChangeMetrics() } } -extern AIHTTPTimeoutPolicy checkAgentAppearanceServiceResponder_timeout; class CheckAgentAppearanceServiceResponder: public LLHTTPClient::ResponderHeadersOnly { public: - CheckAgentAppearanceServiceResponder() - { - } - - virtual ~CheckAgentAppearanceServiceResponder() - { - } + CheckAgentAppearanceServiceResponder() {} - /*virtual*/ void completedHeaders(void) + virtual ~CheckAgentAppearanceServiceResponder() {} + + /*virtual*/ void completedHeaders() { if (isGoodStatus(mStatus)) { @@ -2509,16 +2449,6 @@ public: } } - // Error - /*virtual*//* void httpFailure(void) - { - if (isAgentAvatarValid()) - { - LL_DEBUGS("Avatar") << "failed, will rebake" << llendl; - forceAppearanceUpdate(); - } - } */ - static void forceAppearanceUpdate() { // Trying to rebake immediately after crossing region boundary @@ -2527,7 +2457,6 @@ public: doAfterInterval(force_bake_all_textures, 5.0); } - /*virtual*/ AIHTTPTimeoutPolicy const& getHTTPTimeoutPolicy(void) const { return checkAgentAppearanceServiceResponder_timeout; } /*virtual*/ char const* getName(void) const { return "CheckAgentAppearanceServiceResponder"; } }; diff --git a/indra/newview/llvoicevivox.cpp b/indra/newview/llvoicevivox.cpp index fadf0ee51..54762cfd7 100644 --- a/indra/newview/llvoicevivox.cpp +++ b/indra/newview/llvoicevivox.cpp @@ -836,8 +836,7 @@ void LLVivoxVoiceClient::stateMachine() { // vivox executable exists. Build the command line and launch the daemon. std::string args, cmd; - // SLIM SDK: these arguments are no longer necessary. -// std::string args = " -p tcp -h -c"; + std::string loglevel = gSavedSettings.getString("VivoxDebugLevel"); if(loglevel.empty()) { diff --git a/indra/newview/rlvhandler.cpp b/indra/newview/rlvhandler.cpp index 143ff6903..b44fd340e 100644 --- a/indra/newview/rlvhandler.cpp +++ b/indra/newview/rlvhandler.cpp @@ -1750,9 +1750,9 @@ ERlvCmdRet RlvHandler::onForceGroup(const RlvCommand& rlvCmd) const } else { - for (S32 idxGroup = 0, cntGroup = gAgent.mGroups.count(); (idxGroup < cntGroup) && (idGroup.isNull()); idxGroup++) - if (boost::iequals(gAgent.mGroups.get(idxGroup).mName, rlvCmd.getOption())) - idGroup = gAgent.mGroups.get(idxGroup).mID; + for (S32 idxGroup = 0, cntGroup = gAgent.mGroups.size(); (idxGroup < cntGroup) && (idGroup.isNull()); idxGroup++) + if (boost::iequals(gAgent.mGroups[idxGroup].mName, rlvCmd.getOption())) + idGroup = gAgent.mGroups[idxGroup].mID; fValid = (idGroup.notNull()) || ("none" == rlvCmd.getOption()); } diff --git a/indra/newview/rlvui.cpp b/indra/newview/rlvui.cpp index 46327d8c2..81c431453 100644 --- a/indra/newview/rlvui.cpp +++ b/indra/newview/rlvui.cpp @@ -488,12 +488,12 @@ bool RlvUIEnabler::canViewParcelProperties() const LLUUID& idOwner = pParcel->getOwnerID(); if ( (idOwner != gAgent.getID()) ) { - S32 count = gAgent.mGroups.count(); + S32 count = gAgent.mGroups.size(); for (S32 i = 0; i < count; ++i) { - if (gAgent.mGroups.get(i).mID == idOwner) + if (gAgent.mGroups[i].mID == idOwner) { - fShow = ((gAgent.mGroups.get(i).mPowers & GP_LAND_RETURN) > 0); + fShow = ((gAgent.mGroups[i].mPowers & GP_LAND_RETURN) > 0); break; } } diff --git a/indra/newview/skins/DarkGreen.xml b/indra/newview/skins/DarkGreen.xml new file mode 100644 index 000000000..4f32939ae --- /dev/null +++ b/indra/newview/skins/DarkGreen.xml @@ -0,0 +1,14 @@ + + + skin_name + Dark Green + author_name + JB Kraft, modified by SLB Wirefly + additional_author_names + Linden Lab + skin_info + + folder_name + darkgreen + + diff --git a/indra/newview/skins/dark/colors.xml b/indra/newview/skins/dark/colors.xml index 032351a88..c911a04f4 100644 --- a/indra/newview/skins/dark/colors.xml +++ b/indra/newview/skins/dark/colors.xml @@ -183,12 +183,6 @@ - - - - - - diff --git a/indra/newview/skins/darkcatalan/colors.xml b/indra/newview/skins/darkcatalan/colors.xml index e2579eeee..f8a009e0d 100644 --- a/indra/newview/skins/darkcatalan/colors.xml +++ b/indra/newview/skins/darkcatalan/colors.xml @@ -150,8 +150,6 @@ - - diff --git a/indra/newview/skins/darkgred/colors.xml b/indra/newview/skins/darkgred/colors.xml index 22034c252..c005b75fc 100644 --- a/indra/newview/skins/darkgred/colors.xml +++ b/indra/newview/skins/darkgred/colors.xml @@ -184,11 +184,6 @@ - - - - - diff --git a/indra/newview/skins/darkgreen/colors.xml b/indra/newview/skins/darkgreen/colors.xml new file mode 100644 index 000000000..4745c72dd --- /dev/null +++ b/indra/newview/skins/darkgreen/colors.xml @@ -0,0 +1,201 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/indra/newview/skins/darkgreen/textures/0098b015-3daf-4cfe-a72f-915369ea97c2.tga b/indra/newview/skins/darkgreen/textures/0098b015-3daf-4cfe-a72f-915369ea97c2.tga new file mode 100644 index 000000000..a563672f7 Binary files /dev/null and b/indra/newview/skins/darkgreen/textures/0098b015-3daf-4cfe-a72f-915369ea97c2.tga differ diff --git a/indra/newview/skins/darkgreen/textures/3c18c87e-5f50-14e2-e744-f44734aa365f.tga b/indra/newview/skins/darkgreen/textures/3c18c87e-5f50-14e2-e744-f44734aa365f.tga new file mode 100644 index 000000000..f7841968a Binary files /dev/null and b/indra/newview/skins/darkgreen/textures/3c18c87e-5f50-14e2-e744-f44734aa365f.tga differ diff --git a/indra/newview/skins/darkgreen/textures/5748decc-f629-461c-9a36-a35a221fe21f.tga b/indra/newview/skins/darkgreen/textures/5748decc-f629-461c-9a36-a35a221fe21f.tga new file mode 100644 index 000000000..55e379309 Binary files /dev/null and b/indra/newview/skins/darkgreen/textures/5748decc-f629-461c-9a36-a35a221fe21f.tga differ diff --git a/indra/newview/skins/darkgreen/textures/7a0b1bdb-b5d9-4df5-bac2-ba230da93b5b.tga b/indra/newview/skins/darkgreen/textures/7a0b1bdb-b5d9-4df5-bac2-ba230da93b5b.tga new file mode 100644 index 000000000..dd57c8027 Binary files /dev/null and b/indra/newview/skins/darkgreen/textures/7a0b1bdb-b5d9-4df5-bac2-ba230da93b5b.tga differ diff --git a/indra/newview/skins/darkgreen/textures/7dabc040-ec13-2309-ddf7-4f161f6de2f4.tga b/indra/newview/skins/darkgreen/textures/7dabc040-ec13-2309-ddf7-4f161f6de2f4.tga new file mode 100644 index 000000000..132b192ef Binary files /dev/null and b/indra/newview/skins/darkgreen/textures/7dabc040-ec13-2309-ddf7-4f161f6de2f4.tga differ diff --git a/indra/newview/skins/darkgreen/textures/89e9fc7c-0b16-457d-be4f-136270759c4d.tga b/indra/newview/skins/darkgreen/textures/89e9fc7c-0b16-457d-be4f-136270759c4d.tga new file mode 100644 index 000000000..6cc9ea194 Binary files /dev/null and b/indra/newview/skins/darkgreen/textures/89e9fc7c-0b16-457d-be4f-136270759c4d.tga differ diff --git a/indra/newview/skins/darkgreen/textures/9cad3e6d-2d6d-107d-f8ab-5ba272b5bfe1.tga b/indra/newview/skins/darkgreen/textures/9cad3e6d-2d6d-107d-f8ab-5ba272b5bfe1.tga new file mode 100644 index 000000000..ceaaabab8 Binary files /dev/null and b/indra/newview/skins/darkgreen/textures/9cad3e6d-2d6d-107d-f8ab-5ba272b5bfe1.tga differ diff --git a/indra/newview/skins/darkgreen/textures/active_speakers.tga b/indra/newview/skins/darkgreen/textures/active_speakers.tga new file mode 100644 index 000000000..37521d2dd Binary files /dev/null and b/indra/newview/skins/darkgreen/textures/active_speakers.tga differ diff --git a/indra/newview/skins/darkgreen/textures/active_voice_tab.tga b/indra/newview/skins/darkgreen/textures/active_voice_tab.tga new file mode 100644 index 000000000..1a68c98e3 Binary files /dev/null and b/indra/newview/skins/darkgreen/textures/active_voice_tab.tga differ diff --git a/indra/newview/skins/darkgreen/textures/arrow_down.tga b/indra/newview/skins/darkgreen/textures/arrow_down.tga new file mode 100644 index 000000000..5b05df1c2 Binary files /dev/null and b/indra/newview/skins/darkgreen/textures/arrow_down.tga differ diff --git a/indra/newview/skins/darkgreen/textures/arrow_up.tga b/indra/newview/skins/darkgreen/textures/arrow_up.tga new file mode 100644 index 000000000..abe5c20a8 Binary files /dev/null and b/indra/newview/skins/darkgreen/textures/arrow_up.tga differ diff --git a/indra/newview/skins/darkgreen/textures/b4870163-6208-42a9-9801-93133bf9a6cd.tga b/indra/newview/skins/darkgreen/textures/b4870163-6208-42a9-9801-93133bf9a6cd.tga new file mode 100644 index 000000000..66c9dc4e0 Binary files /dev/null and b/indra/newview/skins/darkgreen/textures/b4870163-6208-42a9-9801-93133bf9a6cd.tga differ diff --git a/indra/newview/skins/darkgreen/textures/black.tga b/indra/newview/skins/darkgreen/textures/black.tga new file mode 100644 index 000000000..e368ea496 Binary files /dev/null and b/indra/newview/skins/darkgreen/textures/black.tga differ diff --git a/indra/newview/skins/darkgreen/textures/btn_chatbar.tga b/indra/newview/skins/darkgreen/textures/btn_chatbar.tga new file mode 100644 index 000000000..76008aef0 Binary files /dev/null and b/indra/newview/skins/darkgreen/textures/btn_chatbar.tga differ diff --git a/indra/newview/skins/darkgreen/textures/btn_chatbar_selected.tga b/indra/newview/skins/darkgreen/textures/btn_chatbar_selected.tga new file mode 100644 index 000000000..1698e72c2 Binary files /dev/null and b/indra/newview/skins/darkgreen/textures/btn_chatbar_selected.tga differ diff --git a/indra/newview/skins/darkgreen/textures/button_anim_pause.tga b/indra/newview/skins/darkgreen/textures/button_anim_pause.tga new file mode 100644 index 000000000..2d9f2b504 Binary files /dev/null and b/indra/newview/skins/darkgreen/textures/button_anim_pause.tga differ diff --git a/indra/newview/skins/darkgreen/textures/button_anim_pause_selected.tga b/indra/newview/skins/darkgreen/textures/button_anim_pause_selected.tga new file mode 100644 index 000000000..f75b97d6d Binary files /dev/null and b/indra/newview/skins/darkgreen/textures/button_anim_pause_selected.tga differ diff --git a/indra/newview/skins/darkgreen/textures/button_anim_play.tga b/indra/newview/skins/darkgreen/textures/button_anim_play.tga new file mode 100644 index 000000000..37e9c7ec1 Binary files /dev/null and b/indra/newview/skins/darkgreen/textures/button_anim_play.tga differ diff --git a/indra/newview/skins/darkgreen/textures/button_anim_play_selected.tga b/indra/newview/skins/darkgreen/textures/button_anim_play_selected.tga new file mode 100644 index 000000000..21d1c6db9 Binary files /dev/null and b/indra/newview/skins/darkgreen/textures/button_anim_play_selected.tga differ diff --git a/indra/newview/skins/darkgreen/textures/button_anim_stop.tga b/indra/newview/skins/darkgreen/textures/button_anim_stop.tga new file mode 100644 index 000000000..088896955 Binary files /dev/null and b/indra/newview/skins/darkgreen/textures/button_anim_stop.tga differ diff --git a/indra/newview/skins/darkgreen/textures/button_anim_stop_selected.tga b/indra/newview/skins/darkgreen/textures/button_anim_stop_selected.tga new file mode 100644 index 000000000..46cce99d0 Binary files /dev/null and b/indra/newview/skins/darkgreen/textures/button_anim_stop_selected.tga differ diff --git a/indra/newview/skins/darkgreen/textures/button_disabled_32x128.tga b/indra/newview/skins/darkgreen/textures/button_disabled_32x128.tga new file mode 100644 index 000000000..c3f0ad776 Binary files /dev/null and b/indra/newview/skins/darkgreen/textures/button_disabled_32x128.tga differ diff --git a/indra/newview/skins/darkgreen/textures/button_enabled_32x128.tga b/indra/newview/skins/darkgreen/textures/button_enabled_32x128.tga new file mode 100644 index 000000000..acfa33e7f Binary files /dev/null and b/indra/newview/skins/darkgreen/textures/button_enabled_32x128.tga differ diff --git a/indra/newview/skins/darkgreen/textures/button_enabled_selected_32x128.tga b/indra/newview/skins/darkgreen/textures/button_enabled_selected_32x128.tga new file mode 100644 index 000000000..3823bc194 Binary files /dev/null and b/indra/newview/skins/darkgreen/textures/button_enabled_selected_32x128.tga differ diff --git a/indra/newview/skins/darkgreen/textures/c1e21504-f136-451d-b8e9-929037812f1d.tga b/indra/newview/skins/darkgreen/textures/c1e21504-f136-451d-b8e9-929037812f1d.tga new file mode 100644 index 000000000..6430fce18 Binary files /dev/null and b/indra/newview/skins/darkgreen/textures/c1e21504-f136-451d-b8e9-929037812f1d.tga differ diff --git a/indra/newview/skins/darkgreen/textures/c63f124c-6340-4fbf-b59e-0869a44adb64.tga b/indra/newview/skins/darkgreen/textures/c63f124c-6340-4fbf-b59e-0869a44adb64.tga new file mode 100644 index 000000000..8b743416e Binary files /dev/null and b/indra/newview/skins/darkgreen/textures/c63f124c-6340-4fbf-b59e-0869a44adb64.tga differ diff --git a/indra/newview/skins/darkgreen/textures/cam_rotate_in.tga b/indra/newview/skins/darkgreen/textures/cam_rotate_in.tga new file mode 100644 index 000000000..d08f98059 Binary files /dev/null and b/indra/newview/skins/darkgreen/textures/cam_rotate_in.tga differ diff --git a/indra/newview/skins/darkgreen/textures/cam_rotate_out.tga b/indra/newview/skins/darkgreen/textures/cam_rotate_out.tga new file mode 100644 index 000000000..f8f64f1df Binary files /dev/null and b/indra/newview/skins/darkgreen/textures/cam_rotate_out.tga differ diff --git a/indra/newview/skins/darkgreen/textures/cam_tracking_in.tga b/indra/newview/skins/darkgreen/textures/cam_tracking_in.tga new file mode 100644 index 000000000..562c951be Binary files /dev/null and b/indra/newview/skins/darkgreen/textures/cam_tracking_in.tga differ diff --git a/indra/newview/skins/darkgreen/textures/cam_tracking_out.tga b/indra/newview/skins/darkgreen/textures/cam_tracking_out.tga new file mode 100644 index 000000000..7835704d1 Binary files /dev/null and b/indra/newview/skins/darkgreen/textures/cam_tracking_out.tga differ diff --git a/indra/newview/skins/darkgreen/textures/cam_zoom_minus_in.tga b/indra/newview/skins/darkgreen/textures/cam_zoom_minus_in.tga new file mode 100644 index 000000000..a1da27bf8 Binary files /dev/null and b/indra/newview/skins/darkgreen/textures/cam_zoom_minus_in.tga differ diff --git a/indra/newview/skins/darkgreen/textures/cam_zoom_out.tga b/indra/newview/skins/darkgreen/textures/cam_zoom_out.tga new file mode 100644 index 000000000..2e9519d72 Binary files /dev/null and b/indra/newview/skins/darkgreen/textures/cam_zoom_out.tga differ diff --git a/indra/newview/skins/darkgreen/textures/cam_zoom_plus_in.tga b/indra/newview/skins/darkgreen/textures/cam_zoom_plus_in.tga new file mode 100644 index 000000000..c17d60792 Binary files /dev/null and b/indra/newview/skins/darkgreen/textures/cam_zoom_plus_in.tga differ diff --git a/indra/newview/skins/darkgreen/textures/ce15fd63-b0b6-463c-a37d-ea6393208b3e.tga b/indra/newview/skins/darkgreen/textures/ce15fd63-b0b6-463c-a37d-ea6393208b3e.tga new file mode 100644 index 000000000..046e69688 Binary files /dev/null and b/indra/newview/skins/darkgreen/textures/ce15fd63-b0b6-463c-a37d-ea6393208b3e.tga differ diff --git a/indra/newview/skins/darkgreen/textures/checkbox_disabled_false.tga b/indra/newview/skins/darkgreen/textures/checkbox_disabled_false.tga new file mode 100644 index 000000000..074ded732 Binary files /dev/null and b/indra/newview/skins/darkgreen/textures/checkbox_disabled_false.tga differ diff --git a/indra/newview/skins/darkgreen/textures/checkbox_disabled_true.tga b/indra/newview/skins/darkgreen/textures/checkbox_disabled_true.tga new file mode 100644 index 000000000..79d25902f Binary files /dev/null and b/indra/newview/skins/darkgreen/textures/checkbox_disabled_true.tga differ diff --git a/indra/newview/skins/darkgreen/textures/checkbox_enabled_false.tga b/indra/newview/skins/darkgreen/textures/checkbox_enabled_false.tga new file mode 100644 index 000000000..c29ed89c6 Binary files /dev/null and b/indra/newview/skins/darkgreen/textures/checkbox_enabled_false.tga differ diff --git a/indra/newview/skins/darkgreen/textures/checkbox_enabled_true.tga b/indra/newview/skins/darkgreen/textures/checkbox_enabled_true.tga new file mode 100644 index 000000000..c8904bc60 Binary files /dev/null and b/indra/newview/skins/darkgreen/textures/checkbox_enabled_true.tga differ diff --git a/indra/newview/skins/darkgreen/textures/circle.tga b/indra/newview/skins/darkgreen/textures/circle.tga new file mode 100644 index 000000000..d7097e3a3 Binary files /dev/null and b/indra/newview/skins/darkgreen/textures/circle.tga differ diff --git a/indra/newview/skins/darkgreen/textures/close_in_blue.tga b/indra/newview/skins/darkgreen/textures/close_in_blue.tga new file mode 100644 index 000000000..a1a421e41 Binary files /dev/null and b/indra/newview/skins/darkgreen/textures/close_in_blue.tga differ diff --git a/indra/newview/skins/darkgreen/textures/close_inactive.tga b/indra/newview/skins/darkgreen/textures/close_inactive.tga new file mode 100644 index 000000000..30f6e7b5f Binary files /dev/null and b/indra/newview/skins/darkgreen/textures/close_inactive.tga differ diff --git a/indra/newview/skins/darkgreen/textures/close_inactive_blue.tga b/indra/newview/skins/darkgreen/textures/close_inactive_blue.tga new file mode 100644 index 000000000..30f6e7b5f Binary files /dev/null and b/indra/newview/skins/darkgreen/textures/close_inactive_blue.tga differ diff --git a/indra/newview/skins/darkgreen/textures/closebox.tga b/indra/newview/skins/darkgreen/textures/closebox.tga new file mode 100644 index 000000000..96488b4da Binary files /dev/null and b/indra/newview/skins/darkgreen/textures/closebox.tga differ diff --git a/indra/newview/skins/darkgreen/textures/combobox_arrow.tga b/indra/newview/skins/darkgreen/textures/combobox_arrow.tga new file mode 100644 index 000000000..d769d3105 Binary files /dev/null and b/indra/newview/skins/darkgreen/textures/combobox_arrow.tga differ diff --git a/indra/newview/skins/darkgreen/textures/darkgray.tga b/indra/newview/skins/darkgreen/textures/darkgray.tga new file mode 100644 index 000000000..e69be0893 Binary files /dev/null and b/indra/newview/skins/darkgreen/textures/darkgray.tga differ diff --git a/indra/newview/skins/darkgreen/textures/eye_button_active.tga b/indra/newview/skins/darkgreen/textures/eye_button_active.tga new file mode 100644 index 000000000..cac3de533 Binary files /dev/null and b/indra/newview/skins/darkgreen/textures/eye_button_active.tga differ diff --git a/indra/newview/skins/darkgreen/textures/eye_button_inactive.tga b/indra/newview/skins/darkgreen/textures/eye_button_inactive.tga new file mode 100644 index 000000000..6ca8feec8 Binary files /dev/null and b/indra/newview/skins/darkgreen/textures/eye_button_inactive.tga differ diff --git a/indra/newview/skins/darkgreen/textures/ff9a71eb-7414-4cf8-866e-a701deb7c3cf.tga b/indra/newview/skins/darkgreen/textures/ff9a71eb-7414-4cf8-866e-a701deb7c3cf.tga new file mode 100644 index 000000000..8b9d012a9 Binary files /dev/null and b/indra/newview/skins/darkgreen/textures/ff9a71eb-7414-4cf8-866e-a701deb7c3cf.tga differ diff --git a/indra/newview/skins/darkgreen/textures/ff_edit_mine_button.tga b/indra/newview/skins/darkgreen/textures/ff_edit_mine_button.tga new file mode 100644 index 000000000..01770a3c4 Binary files /dev/null and b/indra/newview/skins/darkgreen/textures/ff_edit_mine_button.tga differ diff --git a/indra/newview/skins/darkgreen/textures/ff_edit_theirs_button.tga b/indra/newview/skins/darkgreen/textures/ff_edit_theirs_button.tga new file mode 100644 index 000000000..78a23b0b7 Binary files /dev/null and b/indra/newview/skins/darkgreen/textures/ff_edit_theirs_button.tga differ diff --git a/indra/newview/skins/darkgreen/textures/ff_online_status_button.tga b/indra/newview/skins/darkgreen/textures/ff_online_status_button.tga new file mode 100644 index 000000000..79f291829 Binary files /dev/null and b/indra/newview/skins/darkgreen/textures/ff_online_status_button.tga differ diff --git a/indra/newview/skins/darkgreen/textures/ff_visible_map_button.tga b/indra/newview/skins/darkgreen/textures/ff_visible_map_button.tga new file mode 100644 index 000000000..bce9a8c61 Binary files /dev/null and b/indra/newview/skins/darkgreen/textures/ff_visible_map_button.tga differ diff --git a/indra/newview/skins/darkgreen/textures/ff_visible_online_button.tga b/indra/newview/skins/darkgreen/textures/ff_visible_online_button.tga new file mode 100644 index 000000000..c888b08c7 Binary files /dev/null and b/indra/newview/skins/darkgreen/textures/ff_visible_online_button.tga differ diff --git a/indra/newview/skins/darkgreen/textures/flyout_btn_left.tga b/indra/newview/skins/darkgreen/textures/flyout_btn_left.tga new file mode 100644 index 000000000..3060d8016 Binary files /dev/null and b/indra/newview/skins/darkgreen/textures/flyout_btn_left.tga differ diff --git a/indra/newview/skins/darkgreen/textures/flyout_btn_left_disabled.tga b/indra/newview/skins/darkgreen/textures/flyout_btn_left_disabled.tga new file mode 100644 index 000000000..060a56bd3 Binary files /dev/null and b/indra/newview/skins/darkgreen/textures/flyout_btn_left_disabled.tga differ diff --git a/indra/newview/skins/darkgreen/textures/flyout_btn_left_selected.tga b/indra/newview/skins/darkgreen/textures/flyout_btn_left_selected.tga new file mode 100644 index 000000000..9965fb416 Binary files /dev/null and b/indra/newview/skins/darkgreen/textures/flyout_btn_left_selected.tga differ diff --git a/indra/newview/skins/darkgreen/textures/flyout_btn_right.tga b/indra/newview/skins/darkgreen/textures/flyout_btn_right.tga new file mode 100644 index 000000000..0a2354ef5 Binary files /dev/null and b/indra/newview/skins/darkgreen/textures/flyout_btn_right.tga differ diff --git a/indra/newview/skins/darkgreen/textures/flyout_btn_right_disabled.tga b/indra/newview/skins/darkgreen/textures/flyout_btn_right_disabled.tga new file mode 100644 index 000000000..9050e1252 Binary files /dev/null and b/indra/newview/skins/darkgreen/textures/flyout_btn_right_disabled.tga differ diff --git a/indra/newview/skins/darkgreen/textures/flyout_btn_right_selected.tga b/indra/newview/skins/darkgreen/textures/flyout_btn_right_selected.tga new file mode 100644 index 000000000..58594dacc Binary files /dev/null and b/indra/newview/skins/darkgreen/textures/flyout_btn_right_selected.tga differ diff --git a/indra/newview/skins/darkgreen/textures/folder_arrow.tga b/indra/newview/skins/darkgreen/textures/folder_arrow.tga new file mode 100644 index 000000000..77d470731 Binary files /dev/null and b/indra/newview/skins/darkgreen/textures/folder_arrow.tga differ diff --git a/indra/newview/skins/darkgreen/textures/icn_active-speakers-dot-lvl0.tga b/indra/newview/skins/darkgreen/textures/icn_active-speakers-dot-lvl0.tga new file mode 100644 index 000000000..35846cef3 Binary files /dev/null and b/indra/newview/skins/darkgreen/textures/icn_active-speakers-dot-lvl0.tga differ diff --git a/indra/newview/skins/darkgreen/textures/icn_active-speakers-dot-lvl1.tga b/indra/newview/skins/darkgreen/textures/icn_active-speakers-dot-lvl1.tga new file mode 100644 index 000000000..1f9f564fa Binary files /dev/null and b/indra/newview/skins/darkgreen/textures/icn_active-speakers-dot-lvl1.tga differ diff --git a/indra/newview/skins/darkgreen/textures/icn_active-speakers-dot-lvl2.tga b/indra/newview/skins/darkgreen/textures/icn_active-speakers-dot-lvl2.tga new file mode 100644 index 000000000..b2e5609f1 Binary files /dev/null and b/indra/newview/skins/darkgreen/textures/icn_active-speakers-dot-lvl2.tga differ diff --git a/indra/newview/skins/darkgreen/textures/icn_active-speakers-typing1.tga b/indra/newview/skins/darkgreen/textures/icn_active-speakers-typing1.tga new file mode 100644 index 000000000..3706c96e0 Binary files /dev/null and b/indra/newview/skins/darkgreen/textures/icn_active-speakers-typing1.tga differ diff --git a/indra/newview/skins/darkgreen/textures/icn_active-speakers-typing2.tga b/indra/newview/skins/darkgreen/textures/icn_active-speakers-typing2.tga new file mode 100644 index 000000000..0d127f946 Binary files /dev/null and b/indra/newview/skins/darkgreen/textures/icn_active-speakers-typing2.tga differ diff --git a/indra/newview/skins/darkgreen/textures/icn_active-speakers-typing3.tga b/indra/newview/skins/darkgreen/textures/icn_active-speakers-typing3.tga new file mode 100644 index 000000000..031b3ad34 Binary files /dev/null and b/indra/newview/skins/darkgreen/textures/icn_active-speakers-typing3.tga differ diff --git a/indra/newview/skins/darkgreen/textures/icn_chatbar.tga b/indra/newview/skins/darkgreen/textures/icn_chatbar.tga new file mode 100644 index 000000000..94fd6dc89 Binary files /dev/null and b/indra/newview/skins/darkgreen/textures/icn_chatbar.tga differ diff --git a/indra/newview/skins/darkgreen/textures/icn_clear_lineeditor.tga b/indra/newview/skins/darkgreen/textures/icn_clear_lineeditor.tga new file mode 100644 index 000000000..8cd8310c6 Binary files /dev/null and b/indra/newview/skins/darkgreen/textures/icn_clear_lineeditor.tga differ diff --git a/indra/newview/skins/darkgreen/textures/icn_media-pause_active.tga b/indra/newview/skins/darkgreen/textures/icn_media-pause_active.tga new file mode 100644 index 000000000..8988829aa Binary files /dev/null and b/indra/newview/skins/darkgreen/textures/icn_media-pause_active.tga differ diff --git a/indra/newview/skins/darkgreen/textures/icn_media-pause_disabled.tga b/indra/newview/skins/darkgreen/textures/icn_media-pause_disabled.tga new file mode 100644 index 000000000..4690f4256 Binary files /dev/null and b/indra/newview/skins/darkgreen/textures/icn_media-pause_disabled.tga differ diff --git a/indra/newview/skins/darkgreen/textures/icn_media-pause_enabled.tga b/indra/newview/skins/darkgreen/textures/icn_media-pause_enabled.tga new file mode 100644 index 000000000..c01399e27 Binary files /dev/null and b/indra/newview/skins/darkgreen/textures/icn_media-pause_enabled.tga differ diff --git a/indra/newview/skins/darkgreen/textures/icn_media-play_enabled.tga b/indra/newview/skins/darkgreen/textures/icn_media-play_enabled.tga new file mode 100644 index 000000000..accac38b0 Binary files /dev/null and b/indra/newview/skins/darkgreen/textures/icn_media-play_enabled.tga differ diff --git a/indra/newview/skins/darkgreen/textures/icn_media-stop_enabled.tga b/indra/newview/skins/darkgreen/textures/icn_media-stop_enabled.tga new file mode 100644 index 000000000..d935fa317 Binary files /dev/null and b/indra/newview/skins/darkgreen/textures/icn_media-stop_enabled.tga differ diff --git a/indra/newview/skins/darkgreen/textures/icn_media.tga b/indra/newview/skins/darkgreen/textures/icn_media.tga new file mode 100644 index 000000000..2a035ba5d Binary files /dev/null and b/indra/newview/skins/darkgreen/textures/icn_media.tga differ diff --git a/indra/newview/skins/darkgreen/textures/icn_music.tga b/indra/newview/skins/darkgreen/textures/icn_music.tga new file mode 100644 index 000000000..81da5abcf Binary files /dev/null and b/indra/newview/skins/darkgreen/textures/icn_music.tga differ diff --git a/indra/newview/skins/darkgreen/textures/icn_scrollbar.tga b/indra/newview/skins/darkgreen/textures/icn_scrollbar.tga new file mode 100644 index 000000000..a19a8a5d1 Binary files /dev/null and b/indra/newview/skins/darkgreen/textures/icn_scrollbar.tga differ diff --git a/indra/newview/skins/darkgreen/textures/icn_scrollbar_bg.tga b/indra/newview/skins/darkgreen/textures/icn_scrollbar_bg.tga new file mode 100644 index 000000000..cd484c61e Binary files /dev/null and b/indra/newview/skins/darkgreen/textures/icn_scrollbar_bg.tga differ diff --git a/indra/newview/skins/darkgreen/textures/icn_scrollbar_thumb.tga b/indra/newview/skins/darkgreen/textures/icn_scrollbar_thumb.tga new file mode 100644 index 000000000..b11b1bdcd Binary files /dev/null and b/indra/newview/skins/darkgreen/textures/icn_scrollbar_thumb.tga differ diff --git a/indra/newview/skins/darkgreen/textures/icn_slide-groove_dark.tga b/indra/newview/skins/darkgreen/textures/icn_slide-groove_dark.tga new file mode 100644 index 000000000..19361436e Binary files /dev/null and b/indra/newview/skins/darkgreen/textures/icn_slide-groove_dark.tga differ diff --git a/indra/newview/skins/darkgreen/textures/icn_slide-highlight.tga b/indra/newview/skins/darkgreen/textures/icn_slide-highlight.tga new file mode 100644 index 000000000..0747e3ceb Binary files /dev/null and b/indra/newview/skins/darkgreen/textures/icn_slide-highlight.tga differ diff --git a/indra/newview/skins/darkgreen/textures/icn_slide-thumb_dark.tga b/indra/newview/skins/darkgreen/textures/icn_slide-thumb_dark.tga new file mode 100644 index 000000000..7605b2c43 Binary files /dev/null and b/indra/newview/skins/darkgreen/textures/icn_slide-thumb_dark.tga differ diff --git a/indra/newview/skins/darkgreen/textures/icn_speaker-muted_dark.tga b/indra/newview/skins/darkgreen/textures/icn_speaker-muted_dark.tga new file mode 100644 index 000000000..f53e8ccf3 Binary files /dev/null and b/indra/newview/skins/darkgreen/textures/icn_speaker-muted_dark.tga differ diff --git a/indra/newview/skins/darkgreen/textures/icn_speaker_dark.tga b/indra/newview/skins/darkgreen/textures/icn_speaker_dark.tga new file mode 100644 index 000000000..6b326cf5e Binary files /dev/null and b/indra/newview/skins/darkgreen/textures/icn_speaker_dark.tga differ diff --git a/indra/newview/skins/darkgreen/textures/icn_toolbar_build.tga b/indra/newview/skins/darkgreen/textures/icn_toolbar_build.tga new file mode 100644 index 000000000..46e84efbc Binary files /dev/null and b/indra/newview/skins/darkgreen/textures/icn_toolbar_build.tga differ diff --git a/indra/newview/skins/darkgreen/textures/icn_toolbar_fly.tga b/indra/newview/skins/darkgreen/textures/icn_toolbar_fly.tga new file mode 100644 index 000000000..8bd422ac5 Binary files /dev/null and b/indra/newview/skins/darkgreen/textures/icn_toolbar_fly.tga differ diff --git a/indra/newview/skins/darkgreen/textures/icn_toolbar_inventory.tga b/indra/newview/skins/darkgreen/textures/icn_toolbar_inventory.tga new file mode 100644 index 000000000..b832ebce9 Binary files /dev/null and b/indra/newview/skins/darkgreen/textures/icn_toolbar_inventory.tga differ diff --git a/indra/newview/skins/darkgreen/textures/icn_toolbar_map.tga b/indra/newview/skins/darkgreen/textures/icn_toolbar_map.tga new file mode 100644 index 000000000..a100f5784 Binary files /dev/null and b/indra/newview/skins/darkgreen/textures/icn_toolbar_map.tga differ diff --git a/indra/newview/skins/darkgreen/textures/icn_toolbar_minimap.tga b/indra/newview/skins/darkgreen/textures/icn_toolbar_minimap.tga new file mode 100644 index 000000000..21149f326 Binary files /dev/null and b/indra/newview/skins/darkgreen/textures/icn_toolbar_minimap.tga differ diff --git a/indra/newview/skins/darkgreen/textures/icn_toolbar_radar.tga b/indra/newview/skins/darkgreen/textures/icn_toolbar_radar.tga new file mode 100644 index 000000000..d1a55ed74 Binary files /dev/null and b/indra/newview/skins/darkgreen/textures/icn_toolbar_radar.tga differ diff --git a/indra/newview/skins/darkgreen/textures/icn_toolbar_search.tga b/indra/newview/skins/darkgreen/textures/icn_toolbar_search.tga new file mode 100644 index 000000000..2da9704f1 Binary files /dev/null and b/indra/newview/skins/darkgreen/textures/icn_toolbar_search.tga differ diff --git a/indra/newview/skins/darkgreen/textures/icn_toolbar_snapshot.tga b/indra/newview/skins/darkgreen/textures/icn_toolbar_snapshot.tga new file mode 100644 index 000000000..23b97c0eb Binary files /dev/null and b/indra/newview/skins/darkgreen/textures/icn_toolbar_snapshot.tga differ diff --git a/indra/newview/skins/darkgreen/textures/lightgray.tga b/indra/newview/skins/darkgreen/textures/lightgray.tga new file mode 100644 index 000000000..e69be0893 Binary files /dev/null and b/indra/newview/skins/darkgreen/textures/lightgray.tga differ diff --git a/indra/newview/skins/darkgreen/textures/minimize.tga b/indra/newview/skins/darkgreen/textures/minimize.tga new file mode 100644 index 000000000..35d2e9ada Binary files /dev/null and b/indra/newview/skins/darkgreen/textures/minimize.tga differ diff --git a/indra/newview/skins/darkgreen/textures/minimize_inactive.tga b/indra/newview/skins/darkgreen/textures/minimize_inactive.tga new file mode 100644 index 000000000..8f09acda9 Binary files /dev/null and b/indra/newview/skins/darkgreen/textures/minimize_inactive.tga differ diff --git a/indra/newview/skins/darkgreen/textures/minimize_pressed.tga b/indra/newview/skins/darkgreen/textures/minimize_pressed.tga new file mode 100644 index 000000000..bc03952e7 Binary files /dev/null and b/indra/newview/skins/darkgreen/textures/minimize_pressed.tga differ diff --git a/indra/newview/skins/darkgreen/textures/move_backward_in.tga b/indra/newview/skins/darkgreen/textures/move_backward_in.tga new file mode 100644 index 000000000..b64204eb2 Binary files /dev/null and b/indra/newview/skins/darkgreen/textures/move_backward_in.tga differ diff --git a/indra/newview/skins/darkgreen/textures/move_backward_out.tga b/indra/newview/skins/darkgreen/textures/move_backward_out.tga new file mode 100644 index 000000000..1acce4b7b Binary files /dev/null and b/indra/newview/skins/darkgreen/textures/move_backward_out.tga differ diff --git a/indra/newview/skins/darkgreen/textures/move_down_in.tga b/indra/newview/skins/darkgreen/textures/move_down_in.tga new file mode 100644 index 000000000..904e9a8c8 Binary files /dev/null and b/indra/newview/skins/darkgreen/textures/move_down_in.tga differ diff --git a/indra/newview/skins/darkgreen/textures/move_down_out.tga b/indra/newview/skins/darkgreen/textures/move_down_out.tga new file mode 100644 index 000000000..39bcda4c3 Binary files /dev/null and b/indra/newview/skins/darkgreen/textures/move_down_out.tga differ diff --git a/indra/newview/skins/darkgreen/textures/move_forward_in.tga b/indra/newview/skins/darkgreen/textures/move_forward_in.tga new file mode 100644 index 000000000..d41a1e1ed Binary files /dev/null and b/indra/newview/skins/darkgreen/textures/move_forward_in.tga differ diff --git a/indra/newview/skins/darkgreen/textures/move_forward_out.tga b/indra/newview/skins/darkgreen/textures/move_forward_out.tga new file mode 100644 index 000000000..643c26066 Binary files /dev/null and b/indra/newview/skins/darkgreen/textures/move_forward_out.tga differ diff --git a/indra/newview/skins/darkgreen/textures/move_left_in.tga b/indra/newview/skins/darkgreen/textures/move_left_in.tga new file mode 100644 index 000000000..f63ff2d4a Binary files /dev/null and b/indra/newview/skins/darkgreen/textures/move_left_in.tga differ diff --git a/indra/newview/skins/darkgreen/textures/move_left_out.tga b/indra/newview/skins/darkgreen/textures/move_left_out.tga new file mode 100644 index 000000000..775bc151b Binary files /dev/null and b/indra/newview/skins/darkgreen/textures/move_left_out.tga differ diff --git a/indra/newview/skins/darkgreen/textures/move_right_in.tga b/indra/newview/skins/darkgreen/textures/move_right_in.tga new file mode 100644 index 000000000..c85c4c335 Binary files /dev/null and b/indra/newview/skins/darkgreen/textures/move_right_in.tga differ diff --git a/indra/newview/skins/darkgreen/textures/move_right_out.tga b/indra/newview/skins/darkgreen/textures/move_right_out.tga new file mode 100644 index 000000000..729331d99 Binary files /dev/null and b/indra/newview/skins/darkgreen/textures/move_right_out.tga differ diff --git a/indra/newview/skins/darkgreen/textures/move_turn_left_in.tga b/indra/newview/skins/darkgreen/textures/move_turn_left_in.tga new file mode 100644 index 000000000..970b7f2ec Binary files /dev/null and b/indra/newview/skins/darkgreen/textures/move_turn_left_in.tga differ diff --git a/indra/newview/skins/darkgreen/textures/move_turn_left_out.tga b/indra/newview/skins/darkgreen/textures/move_turn_left_out.tga new file mode 100644 index 000000000..8c1677574 Binary files /dev/null and b/indra/newview/skins/darkgreen/textures/move_turn_left_out.tga differ diff --git a/indra/newview/skins/darkgreen/textures/move_turn_right_in.tga b/indra/newview/skins/darkgreen/textures/move_turn_right_in.tga new file mode 100644 index 000000000..367deaeb9 Binary files /dev/null and b/indra/newview/skins/darkgreen/textures/move_turn_right_in.tga differ diff --git a/indra/newview/skins/darkgreen/textures/move_turn_right_out.tga b/indra/newview/skins/darkgreen/textures/move_turn_right_out.tga new file mode 100644 index 000000000..3105adb7b Binary files /dev/null and b/indra/newview/skins/darkgreen/textures/move_turn_right_out.tga differ diff --git a/indra/newview/skins/darkgreen/textures/move_up_in.tga b/indra/newview/skins/darkgreen/textures/move_up_in.tga new file mode 100644 index 000000000..f62727d90 Binary files /dev/null and b/indra/newview/skins/darkgreen/textures/move_up_in.tga differ diff --git a/indra/newview/skins/darkgreen/textures/move_up_out.tga b/indra/newview/skins/darkgreen/textures/move_up_out.tga new file mode 100644 index 000000000..777b221f8 Binary files /dev/null and b/indra/newview/skins/darkgreen/textures/move_up_out.tga differ diff --git a/indra/newview/skins/darkgreen/textures/mute_icon.tga b/indra/newview/skins/darkgreen/textures/mute_icon.tga new file mode 100644 index 000000000..879b9e618 Binary files /dev/null and b/indra/newview/skins/darkgreen/textures/mute_icon.tga differ diff --git a/indra/newview/skins/darkgreen/textures/notify_next.png b/indra/newview/skins/darkgreen/textures/notify_next.png new file mode 100644 index 000000000..b57c26e26 Binary files /dev/null and b/indra/newview/skins/darkgreen/textures/notify_next.png differ diff --git a/indra/newview/skins/darkgreen/textures/preview.png b/indra/newview/skins/darkgreen/textures/preview.png new file mode 100644 index 000000000..d84ba377d Binary files /dev/null and b/indra/newview/skins/darkgreen/textures/preview.png differ diff --git a/indra/newview/skins/darkgreen/textures/progress_fill.tga b/indra/newview/skins/darkgreen/textures/progress_fill.tga new file mode 100644 index 000000000..bbdf5dd0b Binary files /dev/null and b/indra/newview/skins/darkgreen/textures/progress_fill.tga differ diff --git a/indra/newview/skins/darkgreen/textures/progressbar_fill.tga b/indra/newview/skins/darkgreen/textures/progressbar_fill.tga new file mode 100644 index 000000000..7070343c0 Binary files /dev/null and b/indra/newview/skins/darkgreen/textures/progressbar_fill.tga differ diff --git a/indra/newview/skins/darkgreen/textures/progressbar_track.tga b/indra/newview/skins/darkgreen/textures/progressbar_track.tga new file mode 100644 index 000000000..3434330c1 Binary files /dev/null and b/indra/newview/skins/darkgreen/textures/progressbar_track.tga differ diff --git a/indra/newview/skins/darkgreen/textures/ptt_lock_off.tga b/indra/newview/skins/darkgreen/textures/ptt_lock_off.tga new file mode 100644 index 000000000..cb6834469 Binary files /dev/null and b/indra/newview/skins/darkgreen/textures/ptt_lock_off.tga differ diff --git a/indra/newview/skins/darkgreen/textures/ptt_lock_on.tga b/indra/newview/skins/darkgreen/textures/ptt_lock_on.tga new file mode 100644 index 000000000..5a7413bde Binary files /dev/null and b/indra/newview/skins/darkgreen/textures/ptt_lock_on.tga differ diff --git a/indra/newview/skins/darkgreen/textures/radio_active_false.tga b/indra/newview/skins/darkgreen/textures/radio_active_false.tga new file mode 100644 index 000000000..15d5e5927 Binary files /dev/null and b/indra/newview/skins/darkgreen/textures/radio_active_false.tga differ diff --git a/indra/newview/skins/darkgreen/textures/radio_active_true.tga b/indra/newview/skins/darkgreen/textures/radio_active_true.tga new file mode 100644 index 000000000..cbef88913 Binary files /dev/null and b/indra/newview/skins/darkgreen/textures/radio_active_true.tga differ diff --git a/indra/newview/skins/darkgreen/textures/radio_inactive_false.tga b/indra/newview/skins/darkgreen/textures/radio_inactive_false.tga new file mode 100644 index 000000000..48a934221 Binary files /dev/null and b/indra/newview/skins/darkgreen/textures/radio_inactive_false.tga differ diff --git a/indra/newview/skins/darkgreen/textures/radio_inactive_true.tga b/indra/newview/skins/darkgreen/textures/radio_inactive_true.tga new file mode 100644 index 000000000..785b3fa6d Binary files /dev/null and b/indra/newview/skins/darkgreen/textures/radio_inactive_true.tga differ diff --git a/indra/newview/skins/darkgreen/textures/resize_handle_bottom_right_blue.tga b/indra/newview/skins/darkgreen/textures/resize_handle_bottom_right_blue.tga new file mode 100644 index 000000000..b40ef7305 Binary files /dev/null and b/indra/newview/skins/darkgreen/textures/resize_handle_bottom_right_blue.tga differ diff --git a/indra/newview/skins/darkgreen/textures/restore.tga b/indra/newview/skins/darkgreen/textures/restore.tga new file mode 100644 index 000000000..904797e7e Binary files /dev/null and b/indra/newview/skins/darkgreen/textures/restore.tga differ diff --git a/indra/newview/skins/darkgreen/textures/restore_inactive.tga b/indra/newview/skins/darkgreen/textures/restore_inactive.tga new file mode 100644 index 000000000..8f09acda9 Binary files /dev/null and b/indra/newview/skins/darkgreen/textures/restore_inactive.tga differ diff --git a/indra/newview/skins/darkgreen/textures/restore_pressed.tga b/indra/newview/skins/darkgreen/textures/restore_pressed.tga new file mode 100644 index 000000000..c8ce0f9b9 Binary files /dev/null and b/indra/newview/skins/darkgreen/textures/restore_pressed.tga differ diff --git a/indra/newview/skins/darkgreen/textures/rounded_square.tga b/indra/newview/skins/darkgreen/textures/rounded_square.tga new file mode 100644 index 000000000..c8fc7b799 Binary files /dev/null and b/indra/newview/skins/darkgreen/textures/rounded_square.tga differ diff --git a/indra/newview/skins/darkgreen/textures/rounded_square_soft.tga b/indra/newview/skins/darkgreen/textures/rounded_square_soft.tga new file mode 100644 index 000000000..0e5bc79ac Binary files /dev/null and b/indra/newview/skins/darkgreen/textures/rounded_square_soft.tga differ diff --git a/indra/newview/skins/darkgreen/textures/scrollbutton_down_in_blue.tga b/indra/newview/skins/darkgreen/textures/scrollbutton_down_in_blue.tga new file mode 100644 index 000000000..6a89d4ac7 Binary files /dev/null and b/indra/newview/skins/darkgreen/textures/scrollbutton_down_in_blue.tga differ diff --git a/indra/newview/skins/darkgreen/textures/scrollbutton_down_out_blue.tga b/indra/newview/skins/darkgreen/textures/scrollbutton_down_out_blue.tga new file mode 100644 index 000000000..04e158eba Binary files /dev/null and b/indra/newview/skins/darkgreen/textures/scrollbutton_down_out_blue.tga differ diff --git a/indra/newview/skins/darkgreen/textures/scrollbutton_left_in_blue.tga b/indra/newview/skins/darkgreen/textures/scrollbutton_left_in_blue.tga new file mode 100644 index 000000000..4efaa9908 Binary files /dev/null and b/indra/newview/skins/darkgreen/textures/scrollbutton_left_in_blue.tga differ diff --git a/indra/newview/skins/darkgreen/textures/scrollbutton_left_out_blue.tga b/indra/newview/skins/darkgreen/textures/scrollbutton_left_out_blue.tga new file mode 100644 index 000000000..4de4ca5dc Binary files /dev/null and b/indra/newview/skins/darkgreen/textures/scrollbutton_left_out_blue.tga differ diff --git a/indra/newview/skins/darkgreen/textures/scrollbutton_right_in_blue.tga b/indra/newview/skins/darkgreen/textures/scrollbutton_right_in_blue.tga new file mode 100644 index 000000000..484f0469b Binary files /dev/null and b/indra/newview/skins/darkgreen/textures/scrollbutton_right_in_blue.tga differ diff --git a/indra/newview/skins/darkgreen/textures/scrollbutton_right_out_blue.tga b/indra/newview/skins/darkgreen/textures/scrollbutton_right_out_blue.tga new file mode 100644 index 000000000..fca79181b Binary files /dev/null and b/indra/newview/skins/darkgreen/textures/scrollbutton_right_out_blue.tga differ diff --git a/indra/newview/skins/darkgreen/textures/scrollbutton_up_in_blue.tga b/indra/newview/skins/darkgreen/textures/scrollbutton_up_in_blue.tga new file mode 100644 index 000000000..d8fd0a7cc Binary files /dev/null and b/indra/newview/skins/darkgreen/textures/scrollbutton_up_in_blue.tga differ diff --git a/indra/newview/skins/darkgreen/textures/scrollbutton_up_out_blue.tga b/indra/newview/skins/darkgreen/textures/scrollbutton_up_out_blue.tga new file mode 100644 index 000000000..9112d187e Binary files /dev/null and b/indra/newview/skins/darkgreen/textures/scrollbutton_up_out_blue.tga differ diff --git a/indra/newview/skins/darkgreen/textures/spacer24.tga b/indra/newview/skins/darkgreen/textures/spacer24.tga new file mode 100644 index 000000000..c7cab6b38 Binary files /dev/null and b/indra/newview/skins/darkgreen/textures/spacer24.tga differ diff --git a/indra/newview/skins/darkgreen/textures/spacer35.tga b/indra/newview/skins/darkgreen/textures/spacer35.tga new file mode 100644 index 000000000..b88bc6680 Binary files /dev/null and b/indra/newview/skins/darkgreen/textures/spacer35.tga differ diff --git a/indra/newview/skins/darkgreen/textures/spin_down_in_blue.tga b/indra/newview/skins/darkgreen/textures/spin_down_in_blue.tga new file mode 100644 index 000000000..1f3dbfc3d Binary files /dev/null and b/indra/newview/skins/darkgreen/textures/spin_down_in_blue.tga differ diff --git a/indra/newview/skins/darkgreen/textures/spin_down_out_blue.tga b/indra/newview/skins/darkgreen/textures/spin_down_out_blue.tga new file mode 100644 index 000000000..6728a6d9f Binary files /dev/null and b/indra/newview/skins/darkgreen/textures/spin_down_out_blue.tga differ diff --git a/indra/newview/skins/darkgreen/textures/spin_up_in_blue.tga b/indra/newview/skins/darkgreen/textures/spin_up_in_blue.tga new file mode 100644 index 000000000..4bb545e0c Binary files /dev/null and b/indra/newview/skins/darkgreen/textures/spin_up_in_blue.tga differ diff --git a/indra/newview/skins/darkgreen/textures/spin_up_out_blue.tga b/indra/newview/skins/darkgreen/textures/spin_up_out_blue.tga new file mode 100644 index 000000000..4a5cbcb94 Binary files /dev/null and b/indra/newview/skins/darkgreen/textures/spin_up_out_blue.tga differ diff --git a/indra/newview/skins/darkgreen/textures/square_btn_32x128.tga b/indra/newview/skins/darkgreen/textures/square_btn_32x128.tga new file mode 100644 index 000000000..495b05656 Binary files /dev/null and b/indra/newview/skins/darkgreen/textures/square_btn_32x128.tga differ diff --git a/indra/newview/skins/darkgreen/textures/square_btn_selected_32x128.tga b/indra/newview/skins/darkgreen/textures/square_btn_selected_32x128.tga new file mode 100644 index 000000000..0abbf56ce Binary files /dev/null and b/indra/newview/skins/darkgreen/textures/square_btn_selected_32x128.tga differ diff --git a/indra/newview/skins/darkgreen/textures/status_buy_currency.tga b/indra/newview/skins/darkgreen/textures/status_buy_currency.tga new file mode 100644 index 000000000..206550cbb Binary files /dev/null and b/indra/newview/skins/darkgreen/textures/status_buy_currency.tga differ diff --git a/indra/newview/skins/darkgreen/textures/status_buy_currency_pressed.tga b/indra/newview/skins/darkgreen/textures/status_buy_currency_pressed.tga new file mode 100644 index 000000000..2b82aef0f Binary files /dev/null and b/indra/newview/skins/darkgreen/textures/status_buy_currency_pressed.tga differ diff --git a/indra/newview/skins/darkgreen/textures/status_buy_land.tga b/indra/newview/skins/darkgreen/textures/status_buy_land.tga new file mode 100644 index 000000000..4c4e977a8 Binary files /dev/null and b/indra/newview/skins/darkgreen/textures/status_buy_land.tga differ diff --git a/indra/newview/skins/darkgreen/textures/tab_bottom_blue.tga b/indra/newview/skins/darkgreen/textures/tab_bottom_blue.tga new file mode 100644 index 000000000..65c9228db Binary files /dev/null and b/indra/newview/skins/darkgreen/textures/tab_bottom_blue.tga differ diff --git a/indra/newview/skins/darkgreen/textures/tab_bottom_selected_blue.tga b/indra/newview/skins/darkgreen/textures/tab_bottom_selected_blue.tga new file mode 100644 index 000000000..7507edabb Binary files /dev/null and b/indra/newview/skins/darkgreen/textures/tab_bottom_selected_blue.tga differ diff --git a/indra/newview/skins/darkgreen/textures/tab_left.tga b/indra/newview/skins/darkgreen/textures/tab_left.tga new file mode 100644 index 000000000..36a48bfd2 Binary files /dev/null and b/indra/newview/skins/darkgreen/textures/tab_left.tga differ diff --git a/indra/newview/skins/darkgreen/textures/tab_left_selected.tga b/indra/newview/skins/darkgreen/textures/tab_left_selected.tga new file mode 100644 index 000000000..2ed53bc03 Binary files /dev/null and b/indra/newview/skins/darkgreen/textures/tab_left_selected.tga differ diff --git a/indra/newview/skins/darkgreen/textures/tab_top_blue.tga b/indra/newview/skins/darkgreen/textures/tab_top_blue.tga new file mode 100644 index 000000000..8f2625e72 Binary files /dev/null and b/indra/newview/skins/darkgreen/textures/tab_top_blue.tga differ diff --git a/indra/newview/skins/darkgreen/textures/tab_top_selected_blue.tga b/indra/newview/skins/darkgreen/textures/tab_top_selected_blue.tga new file mode 100644 index 000000000..bab178a71 Binary files /dev/null and b/indra/newview/skins/darkgreen/textures/tab_top_selected_blue.tga differ diff --git a/indra/newview/skins/darkgreen/textures/tabarea.tga b/indra/newview/skins/darkgreen/textures/tabarea.tga new file mode 100644 index 000000000..5517aebfc Binary files /dev/null and b/indra/newview/skins/darkgreen/textures/tabarea.tga differ diff --git a/indra/newview/skins/darkgreen/textures/textures.xml b/indra/newview/skins/darkgreen/textures/textures.xml new file mode 100644 index 000000000..451b70062 --- /dev/null +++ b/indra/newview/skins/darkgreen/textures/textures.xml @@ -0,0 +1,389 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/indra/newview/skins/darkgreen/textures/tool_dozer.tga b/indra/newview/skins/darkgreen/textures/tool_dozer.tga new file mode 100644 index 000000000..bc1cc7ade Binary files /dev/null and b/indra/newview/skins/darkgreen/textures/tool_dozer.tga differ diff --git a/indra/newview/skins/darkgreen/textures/tool_dozer_active.tga b/indra/newview/skins/darkgreen/textures/tool_dozer_active.tga new file mode 100644 index 000000000..6099823a8 Binary files /dev/null and b/indra/newview/skins/darkgreen/textures/tool_dozer_active.tga differ diff --git a/indra/newview/skins/darkgreen/textures/tool_zoom.tga b/indra/newview/skins/darkgreen/textures/tool_zoom.tga new file mode 100644 index 000000000..2f6a75e4b Binary files /dev/null and b/indra/newview/skins/darkgreen/textures/tool_zoom.tga differ diff --git a/indra/newview/skins/darkgreen/textures/tool_zoom_active.tga b/indra/newview/skins/darkgreen/textures/tool_zoom_active.tga new file mode 100644 index 000000000..e83ca1a4b Binary files /dev/null and b/indra/newview/skins/darkgreen/textures/tool_zoom_active.tga differ diff --git a/indra/newview/skins/darkgreen/textures/toolbar_btn_disabled.tga b/indra/newview/skins/darkgreen/textures/toolbar_btn_disabled.tga new file mode 100644 index 000000000..59c57fc7c Binary files /dev/null and b/indra/newview/skins/darkgreen/textures/toolbar_btn_disabled.tga differ diff --git a/indra/newview/skins/darkgreen/textures/toolbar_btn_enabled.tga b/indra/newview/skins/darkgreen/textures/toolbar_btn_enabled.tga new file mode 100644 index 000000000..f005949b0 Binary files /dev/null and b/indra/newview/skins/darkgreen/textures/toolbar_btn_enabled.tga differ diff --git a/indra/newview/skins/darkgreen/textures/toolbar_btn_selected.tga b/indra/newview/skins/darkgreen/textures/toolbar_btn_selected.tga new file mode 100644 index 000000000..cfd577b55 Binary files /dev/null and b/indra/newview/skins/darkgreen/textures/toolbar_btn_selected.tga differ diff --git a/indra/newview/skins/darkgreen/textures/toolbar_tab.tga b/indra/newview/skins/darkgreen/textures/toolbar_tab.tga new file mode 100644 index 000000000..eda95f6e2 Binary files /dev/null and b/indra/newview/skins/darkgreen/textures/toolbar_tab.tga differ diff --git a/indra/newview/skins/darkgreen/textures/white.tga b/indra/newview/skins/darkgreen/textures/white.tga new file mode 100644 index 000000000..55e379309 Binary files /dev/null and b/indra/newview/skins/darkgreen/textures/white.tga differ diff --git a/indra/newview/skins/darkorange/colors.xml b/indra/newview/skins/darkorange/colors.xml index f3ff107f0..07c97ce6e 100644 --- a/indra/newview/skins/darkorange/colors.xml +++ b/indra/newview/skins/darkorange/colors.xml @@ -186,12 +186,6 @@ - - - - - - diff --git a/indra/newview/skins/default/textures/textures.xml b/indra/newview/skins/default/textures/textures.xml index fb9c6c1e3..574f2b3a7 100644 --- a/indra/newview/skins/default/textures/textures.xml +++ b/indra/newview/skins/default/textures/textures.xml @@ -122,7 +122,7 @@ - + diff --git a/indra/newview/skins/default/xui/en-us/floater_customize.xml b/indra/newview/skins/default/xui/en-us/floater_customize.xml index b4eeaf48f..bdd0065cd 100644 --- a/indra/newview/skins/default/xui/en-us/floater_customize.xml +++ b/indra/newview/skins/default/xui/en-us/floater_customize.xml @@ -47,12 +47,10 @@ name="Legs" scale_image="true" width="82" /> - + Female - + Male diff --git a/indra/newview/skins/default/xui/en-us/menu_avs_list.xml b/indra/newview/skins/default/xui/en-us/menu_avs_list.xml index 2ba08eaaa..feb47745d 100644 --- a/indra/newview/skins/default/xui/en-us/menu_avs_list.xml +++ b/indra/newview/skins/default/xui/en-us/menu_avs_list.xml @@ -42,7 +42,7 @@ - + diff --git a/indra/newview/skins/default/xui/en-us/menu_radar.xml b/indra/newview/skins/default/xui/en-us/menu_radar.xml index 0a9e734aa..2f06bbf3c 100644 --- a/indra/newview/skins/default/xui/en-us/menu_radar.xml +++ b/indra/newview/skins/default/xui/en-us/menu_radar.xml @@ -43,7 +43,7 @@ - + diff --git a/indra/newview/skins/default/xui/en-us/panel_preferences_ascent_system.xml b/indra/newview/skins/default/xui/en-us/panel_preferences_ascent_system.xml index 3f0c796a6..188f6569e 100644 --- a/indra/newview/skins/default/xui/en-us/panel_preferences_ascent_system.xml +++ b/indra/newview/skins/default/xui/en-us/panel_preferences_ascent_system.xml @@ -99,6 +99,7 @@ + @@ -106,7 +107,7 @@ - + Drop a landmark below to autoteleport there in the last 20 seconds before region restarts Drop a backup landmark to autoteleport to below, should you already be at the above diff --git a/indra/newview/skins/default/xui/en-us/panel_preferences_network.xml b/indra/newview/skins/default/xui/en-us/panel_preferences_network.xml index a43e4c6dd..85bf46c48 100644 --- a/indra/newview/skins/default/xui/en-us/panel_preferences_network.xml +++ b/indra/newview/skins/default/xui/en-us/panel_preferences_network.xml @@ -1,10 +1,10 @@ Maximum Bandwidth: - + kbps (kilobits per second) Texture Bandwidth: - + kbps (kilobits per second) Use HTTP for: diff --git a/indra/newview/skins/default/xui/en-us/strings.xml b/indra/newview/skins/default/xui/en-us/strings.xml index be50d389f..df9b9f732 100644 --- a/indra/newview/skins/default/xui/en-us/strings.xml +++ b/indra/newview/skins/default/xui/en-us/strings.xml @@ -3347,6 +3347,10 @@ The Allowed Residents: ([ALLOWEDAGENTS], max [MAXACCESS]) Allowed groups: ([ALLOWEDGROUPS], max [MAXACCESS]) + Estate Managers: ([ESTATEMANAGERS], max [MAXMANAGERS]) + Banned Residents: ([BANNEDAGENTS], max [MAXBANNED]) + Allowed Residents + Banned Residents Parcel Script Memory diff --git a/indra/newview/skins/default/xui/fr/panel_preferences_ascent_system.xml b/indra/newview/skins/default/xui/fr/panel_preferences_ascent_system.xml index eab807607..11d25e01a 100644 --- a/indra/newview/skins/default/xui/fr/panel_preferences_ascent_system.xml +++ b/indra/newview/skins/default/xui/fr/panel_preferences_ascent_system.xml @@ -79,6 +79,7 @@ + diff --git a/indra/newview/skins/emerald/colors.xml b/indra/newview/skins/emerald/colors.xml index 57f34271a..9fd1a9c31 100644 --- a/indra/newview/skins/emerald/colors.xml +++ b/indra/newview/skins/emerald/colors.xml @@ -184,12 +184,6 @@ - - - - - - diff --git a/indra/newview/skins/gred/colors.xml b/indra/newview/skins/gred/colors.xml index 6ecb33e97..521f3fdb6 100644 --- a/indra/newview/skins/gred/colors.xml +++ b/indra/newview/skins/gred/colors.xml @@ -183,12 +183,6 @@ - - - - - - diff --git a/indra/newview/skins/italia/colors.xml b/indra/newview/skins/italia/colors.xml index a44b198bd..6f50ed257 100644 --- a/indra/newview/skins/italia/colors.xml +++ b/indra/newview/skins/italia/colors.xml @@ -1,195 +1,197 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - + + + + + - - - - - - - - - - + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + + + + + + + + + diff --git a/indra/newview/skins/kirstenLite2/colors.xml b/indra/newview/skins/kirstenLite2/colors.xml index 45ed05b9d..0407e9c41 100644 --- a/indra/newview/skins/kirstenLite2/colors.xml +++ b/indra/newview/skins/kirstenLite2/colors.xml @@ -1,212 +1,213 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/indra/newview/skins/orangelife/colors.xml b/indra/newview/skins/orangelife/colors.xml index 296697ecb..dd6fdc37e 100644 --- a/indra/newview/skins/orangelife/colors.xml +++ b/indra/newview/skins/orangelife/colors.xml @@ -1,197 +1,197 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/indra/newview/skins/ponyaquablue/colors.xml b/indra/newview/skins/ponyaquablue/colors.xml index b48208f68..541777338 100644 --- a/indra/newview/skins/ponyaquablue/colors.xml +++ b/indra/newview/skins/ponyaquablue/colors.xml @@ -185,12 +185,6 @@ - - - - - - diff --git a/indra/newview/skins/ponypurple/colors.xml b/indra/newview/skins/ponypurple/colors.xml index 8cde4c258..07c97ce6e 100644 --- a/indra/newview/skins/ponypurple/colors.xml +++ b/indra/newview/skins/ponypurple/colors.xml @@ -186,11 +186,6 @@ - - - - - diff --git a/indra/newview/skins/pslgreen/colors.xml b/indra/newview/skins/pslgreen/colors.xml index 10647478b..4f1a5838a 100644 --- a/indra/newview/skins/pslgreen/colors.xml +++ b/indra/newview/skins/pslgreen/colors.xml @@ -183,12 +183,6 @@ - - - - - - diff --git a/indra/newview/skins/pslpurple/colors.xml b/indra/newview/skins/pslpurple/colors.xml index 10647478b..4f1a5838a 100644 --- a/indra/newview/skins/pslpurple/colors.xml +++ b/indra/newview/skins/pslpurple/colors.xml @@ -183,12 +183,6 @@ - - - - - - diff --git a/indra/newview/skins/ruby/colors.xml b/indra/newview/skins/ruby/colors.xml index f55f4c2e5..ae62cfda5 100644 --- a/indra/newview/skins/ruby/colors.xml +++ b/indra/newview/skins/ruby/colors.xml @@ -183,11 +183,6 @@ - - - - - diff --git a/indra/newview/skins/sapphire/colors.xml b/indra/newview/skins/sapphire/colors.xml index 0b5e343e1..53dd85540 100644 --- a/indra/newview/skins/sapphire/colors.xml +++ b/indra/newview/skins/sapphire/colors.xml @@ -190,12 +190,6 @@ - - - - - - diff --git a/indra/newview/skins/snowwhite/colors.xml b/indra/newview/skins/snowwhite/colors.xml index 85e2c6399..4cdecf112 100644 --- a/indra/newview/skins/snowwhite/colors.xml +++ b/indra/newview/skins/snowwhite/colors.xml @@ -1,210 +1,207 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - + + + + + + + + + + + + + + - - + + diff --git a/indra/newview/skins/stpatrick/colors.xml b/indra/newview/skins/stpatrick/colors.xml index a2acbaf9e..5bc5d22fd 100644 --- a/indra/newview/skins/stpatrick/colors.xml +++ b/indra/newview/skins/stpatrick/colors.xml @@ -1,197 +1,196 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/indra/newview/skins/white_emerald/colors.xml b/indra/newview/skins/white_emerald/colors.xml index 4cbe81f9d..bdb32f9eb 100644 --- a/indra/newview/skins/white_emerald/colors.xml +++ b/indra/newview/skins/white_emerald/colors.xml @@ -183,12 +183,6 @@ - - - - - - diff --git a/indra/newview/viewer_manifest.py b/indra/newview/viewer_manifest.py index aa0529bb1..42da1e5ca 100755 --- a/indra/newview/viewer_manifest.py +++ b/indra/newview/viewer_manifest.py @@ -361,11 +361,11 @@ class WindowsManifest(ViewerManifest): if installed_dir != out_path: if install: out_path = installed_dir - result += 'SetOutPath ' + out_path + '\n' + result += 'SetOutPath "' + out_path + '"\n' if install: - result += 'File ' + pkg_file + '\n' + result += 'File "' + pkg_file + '"\n' else: - result += 'Delete ' + wpath(os.path.join('$INSTDIR', rel_file)) + '\n' + result += 'Delete "' + wpath(os.path.join('$INSTDIR', rel_file)) + '"\n' # at the end of a delete, just rmdir all the directories if not install: @@ -456,14 +456,14 @@ class WindowsManifest(ViewerManifest): try: import _winreg as reg NSIS_path = reg.QueryValue(reg.HKEY_LOCAL_MACHINE, r"SOFTWARE\NSIS\Unicode") + '\\makensis.exe' - self.run_command('"' + proper_windows_path(NSIS_path) + '" ' + self.dst_path_of(tempfile)) + self.run_command([proper_windows_path(NSIS_path), self.dst_path_of(tempfile)]) except: try: NSIS_path = os.environ['ProgramFiles'] + '\\NSIS\\Unicode\\makensis.exe' - self.run_command('"' + proper_windows_path(NSIS_path) + '" ' + self.dst_path_of(tempfile)) + self.run_command([proper_windows_path(NSIS_path), self.dst_path_of(tempfile)]) except: NSIS_path = os.environ['ProgramFiles(X86)'] + '\\NSIS\\Unicode\\makensis.exe' - self.run_command('"' + proper_windows_path(NSIS_path) + '" ' + self.dst_path_of(tempfile)) + self.run_command([proper_windows_path(NSIS_path),self.dst_path_of(tempfile)]) # self.remove(self.dst_path_of(tempfile)) # If we're on a build machine, sign the code using our Authenticode certificate. JC sign_py = os.path.expandvars("{SIGN_PY}") @@ -765,11 +765,7 @@ class LinuxManifest(ViewerManifest): else: installer_name += '_' + self.channel_oneword().upper() - if self.args['buildtype'].lower() in ['release', 'releasesse2']: - print "* Going strip-crazy on the packaged binaries, since this is a RELEASE build" - # makes some small assumptions about our packaged dir structure - self.run_command("find %(d)r/bin %(d)r/lib* -type f | xargs -d '\n' --no-run-if-empty strip --strip-unneeded" % {'d': self.get_dst_prefix()} ) - self.run_command("find %(d)r/bin %(d)r/lib* -type f -not -name \\*.so | xargs -d '\n' --no-run-if-empty strip -s" % {'d': self.get_dst_prefix()} ) + self.strip_binaries() # Fix access permissions self.run_command(""" @@ -800,6 +796,12 @@ class LinuxManifest(ViewerManifest): 'dst': self.get_dst_prefix(), 'inst': self.build_path_of(installer_name)}) + def strip_binaries(self): + if self.args['buildtype'].lower() in ['release', 'releasesse2']: + print "* Going strip-crazy on the packaged binaries, since this is a RELEASE build" + # makes some small assumptions about our packaged dir structure + self.run_command("find %(d)r/bin %(d)r/lib* -type f | xargs -d '\n' --no-run-if-empty strip --strip-unneeded" % {'d': self.get_dst_prefix()} ) + self.run_command("find %(d)r/bin %(d)r/lib* -type f -not -name \\*.so | xargs -d '\n' --no-run-if-empty strip -s" % {'d': self.get_dst_prefix()} ) class Linux_i686Manifest(LinuxManifest): def construct(self):