diff --git a/indra/newview/llavatarlist.cpp b/indra/newview/llavatarlist.cpp index de9b687688..f223d38106 100644 --- a/indra/newview/llavatarlist.cpp +++ b/indra/newview/llavatarlist.cpp @@ -394,7 +394,7 @@ void LLAvatarList::refresh() // FIRE-12750: Name filter not working correctly //if (!have_filter || findInsensitive(av_name.getDisplayName(), mNameFilter)) - if (!have_filter || findInsensitive(getNameForDisplay(av_name, mShowDisplayName, mShowUsername, mRlvCheckShowNames), mNameFilter)) + if (!have_filter || findInsensitive(getNameForDisplay(buddy_id, av_name, mShowDisplayName, mShowUsername, mRlvCheckShowNames), mNameFilter)) // { if (nadded >= ADD_LIMIT) @@ -450,7 +450,7 @@ void LLAvatarList::refresh() have_names &= LLAvatarNameCache::get(buddy_id, &av_name); // FIRE-12750: Name filter not working correctly //if (!findInsensitive(av_name.getDisplayName(), mNameFilter)) - if (!findInsensitive(getNameForDisplay(av_name, mShowDisplayName, mShowUsername, mRlvCheckShowNames), mNameFilter)) + if (!findInsensitive(getNameForDisplay(buddy_id, av_name, mShowDisplayName, mShowUsername, mRlvCheckShowNames), mNameFilter)) // { removeItemByUUID(buddy_id); @@ -526,7 +526,7 @@ bool LLAvatarList::filterHasMatches() // FIRE-12750: Name filter not working correctly //if (have_name && !findInsensitive(av_name.getDisplayName(), mNameFilter)) - if (have_name && !findInsensitive(getNameForDisplay(av_name, mShowDisplayName, mShowUsername, mRlvCheckShowNames), mNameFilter)) + if (have_name && !findInsensitive(getNameForDisplay(buddy_id, av_name, mShowDisplayName, mShowUsername, mRlvCheckShowNames), mNameFilter)) // { continue; @@ -742,20 +742,20 @@ void LLAvatarList::onItemDoubleClicked(LLUICtrl* ctrl, S32 x, S32 y, MASK mask) // FIRE-12750: Name filter not working correctly // static -std::string LLAvatarList::getNameForDisplay(const LLAvatarName& av_name, bool show_displayname, bool show_username, bool rlv_check_shownames) +std::string LLAvatarList::getNameForDisplay(const LLUUID& avatar_id, const LLAvatarName& av_name, bool show_displayname, bool show_username, bool rlv_check_shownames) { - bool fRlvFilter = (rlv_check_shownames) && (RlvActions::hasBehaviour(RLV_BHVR_SHOWNAMES)); + bool fRlvCanShowName = (!rlv_check_shownames) || (RlvActions::canShowName(RlvActions::SNC_DEFAULT, avatar_id)); if (show_displayname && !show_username) { - return ( (!fRlvFilter) ? av_name.getDisplayName() : RlvStrings::getAnonym(av_name) ); + return ( (fRlvCanShowName) ? av_name.getDisplayName() : RlvStrings::getAnonym(av_name) ); } else if (!show_displayname && show_username) { - return ( (!fRlvFilter) ? av_name.getUserName() : RlvStrings::getAnonym(av_name) ); + return ( (fRlvCanShowName) ? av_name.getUserName() : RlvStrings::getAnonym(av_name) ); } - else + else { - return ( (!fRlvFilter) ? av_name.getCompleteName() : RlvStrings::getAnonym(av_name) ); + return ( (fRlvCanShowName) ? av_name.getCompleteName() : RlvStrings::getAnonym(av_name) ); } } // diff --git a/indra/newview/llavatarlist.h b/indra/newview/llavatarlist.h index 84c5fca005..924100a3f4 100644 --- a/indra/newview/llavatarlist.h +++ b/indra/newview/llavatarlist.h @@ -113,7 +113,7 @@ public: // [/FS:CR] // FIRE-12750: Name filter not working correctly - static std::string getNameForDisplay(const LLAvatarName& av_name, bool show_displayname, bool show_username, bool rlv_check_shownames); + static std::string getNameForDisplay(const LLUUID& avatar_id, const LLAvatarName& av_name, bool show_displayname, bool show_username, bool rlv_check_shownames); boost::signals2::connection setRefreshCompleteCallback(const commit_signal_t::slot_type& cb); diff --git a/indra/newview/llavatarlistitem.cpp b/indra/newview/llavatarlistitem.cpp index dd6eeed42b..5d4e59aad9 100644 --- a/indra/newview/llavatarlistitem.cpp +++ b/indra/newview/llavatarlistitem.cpp @@ -591,10 +591,11 @@ void LLAvatarListItem::onAvatarNameCache(const LLAvatarName& av_name) // setAvatarName( (fRlvCanShowName) ? av_name.getUserName() : RlvStrings::getAnonym(av_name) ); //else // setAvatarName( (fRlvCanShowName) ? av_name.getCompleteName() : RlvStrings::getAnonym(av_name) ); - setAvatarName(LLAvatarList::getNameForDisplay(av_name, mShowDisplayName, mShowUsername, mRlvCheckShowNames)); + setAvatarName(LLAvatarList::getNameForDisplay(mAvatarId, av_name, mShowDisplayName, mShowUsername, mRlvCheckShowNames)); - // NOTE: If you change this, you will break sorting the contacts list - // by username unless you go change the comparator too. -- TS + // NOTE: If you change this, you will break sorting the contacts list + // by username unless you go change the comparator too. -- TS + setAvatarToolTip( (fRlvCanShowName) ? av_name.getUserName() : RlvStrings::getAnonym(av_name) ); // TODO-RLVa: bit of a hack putting this here. Maybe find a better way? mAvatarIcon->setDrawTooltip(fRlvCanShowName); // [/RLVa:KB] diff --git a/indra/newview/rlvcommon.cpp b/indra/newview/rlvcommon.cpp index 1375110ae6..23821f1fd5 100644 --- a/indra/newview/rlvcommon.cpp +++ b/indra/newview/rlvcommon.cpp @@ -35,6 +35,8 @@ #include "rlvlocks.h" #include "llscriptruntimeperms.h" +#include // icontains +#include // regex_replace_all #include // ============================================================================ @@ -361,6 +363,12 @@ void RlvStrings::setCustomString(const std::string& strStringName, const std::st bool RlvUtil::m_fForceTp = false; +std::string escape_for_regex(const std::string& str) +{ + using namespace boost; + return regex_replace(str, regex("[.^$|()\\[\\]{}*+?\\\\]"), "\\\\&", match_default|format_sed); +} + // Checked: 2009-07-04 (RLVa-1.0.0a) | Modified: RLVa-1.0.0a void RlvUtil::filterLocation(std::string& strUTF8Text) { @@ -368,12 +376,12 @@ void RlvUtil::filterLocation(std::string& strUTF8Text) LLWorld::region_list_t regions = LLWorld::getInstance()->getRegionList(); const std::string& strHiddenRegion = RlvStrings::getString(RLV_STRING_HIDDEN_REGION); for (LLWorld::region_list_t::const_iterator itRegion = regions.begin(); itRegion != regions.end(); ++itRegion) - boost::ireplace_all(strUTF8Text, (*itRegion)->getName(), strHiddenRegion); + boost::replace_all_regex(strUTF8Text, boost::regex("\\b" + escape_for_regex((*itRegion)->getName()) + "\\b", boost::regex::icase), strHiddenRegion); // Filter any mention of the parcel name LLViewerParcelMgr* pParcelMgr = LLViewerParcelMgr::getInstance(); if (pParcelMgr) - boost::ireplace_all(strUTF8Text, pParcelMgr->getAgentParcelName(), RlvStrings::getString(RLV_STRING_HIDDEN_PARCEL)); + boost::replace_all_regex(strUTF8Text, boost::regex("\\b" + escape_for_regex(pParcelMgr->getAgentParcelName()) + "\\b", boost::regex::icase), RlvStrings::getString(RLV_STRING_HIDDEN_PARCEL)); } // Checked: 2010-12-08 (RLVa-1.2.2c) | Modified: RLVa-1.2.2c @@ -386,7 +394,7 @@ void RlvUtil::filterNames(std::string& strUTF8Text, bool fFilterLegacy) LLAvatarName avName; if ( (LLAvatarNameCache::get(idAgents[idxAgent], &avName)) && (!RlvActions::canShowName(RlvActions::SNC_DEFAULT, idAgents[idxAgent])) ) { - const std::string& strDisplayName = avName.getDisplayName(); + const std::string& strDisplayName = escape_for_regex(avName.getDisplayName()); bool fFilterDisplay = (strDisplayName.length() > 2); const std::string& strLegacyName = avName.getLegacyName(); fFilterLegacy &= (strLegacyName.length() > 2); @@ -396,16 +404,16 @@ void RlvUtil::filterNames(std::string& strUTF8Text, bool fFilterLegacy) if (boost::icontains(strLegacyName, strDisplayName)) { if (fFilterLegacy) - boost::ireplace_all(strUTF8Text, strLegacyName, strAnonym); + boost::replace_all_regex(strUTF8Text, boost::regex("\\b" + strLegacyName + "\\b", boost::regex::icase), strAnonym); if (fFilterDisplay) - boost::ireplace_all(strUTF8Text, strDisplayName, strAnonym); + boost::replace_all_regex(strUTF8Text, boost::regex("\\b" + strDisplayName + "\\b", boost::regex::icase), strAnonym); } else { if (fFilterDisplay) - boost::ireplace_all(strUTF8Text, strDisplayName, strAnonym); + boost::replace_all_regex(strUTF8Text, boost::regex("\\b" + strDisplayName + "\\b", boost::regex::icase), strAnonym); if (fFilterLegacy) - boost::ireplace_all(strUTF8Text, strLegacyName, strAnonym); + boost::replace_all_regex(strUTF8Text, boost::regex("\\b" + strLegacyName + "\\b", boost::regex::icase), strAnonym); } } } diff --git a/indra/newview/rlvcommon.h b/indra/newview/rlvcommon.h index 9d586e1724..c19f273770 100644 --- a/indra/newview/rlvcommon.h +++ b/indra/newview/rlvcommon.h @@ -19,6 +19,7 @@ #include "llavatarname.h" #include "llselectmgr.h" +#include "lltrans.h" #include "llviewercontrol.h" #include "rlvdefines.h" @@ -164,7 +165,7 @@ public: static void notifyBlocked(const std::string& strNotifcation, const LLSD& sdArgs = LLSD()); static void notifyBlockedGeneric() { notifyBlocked(RLV_STRING_BLOCKED_GENERIC); } - static void notifyBlockedViewXXX(LLAssetType::EType assetType) { notifyBlocked(RLV_STRING_BLOCKED_VIEWXXX, LLSD().with("[TYPE]", LLAssetType::lookup(assetType))); } + static void notifyBlockedViewXXX(LLAssetType::EType assetType) { notifyBlocked(RLV_STRING_BLOCKED_VIEWXXX, LLSD().with("[TYPE]", LLTrans::getString(LLAssetType::lookupHumanReadable(assetType)))); } static void notifyFailedAssertion(const std::string& strAssert, const std::string& strFile, int nLine); static void sendBusyMessage(const LLUUID& idTo, const std::string& strMsg, const LLUUID& idSession = LLUUID::null); diff --git a/indra/newview/rlvdefines.h b/indra/newview/rlvdefines.h index 9d7ceec8bf..fd16d15302 100644 --- a/indra/newview/rlvdefines.h +++ b/indra/newview/rlvdefines.h @@ -34,7 +34,7 @@ const S32 RLVa_VERSION_PATCH = 0; const S32 RLVa_VERSION_BUILD = 0; // Uncomment before a final release -//#define RLV_RELEASE +#define RLV_RELEASE // Defining these makes it easier if we ever need to change our tag #define RLV_WARNS LL_WARNS("RLV") diff --git a/indra/newview/rlvhandler.cpp b/indra/newview/rlvhandler.cpp index d162dc4bcc..026d05f46f 100644 --- a/indra/newview/rlvhandler.cpp +++ b/indra/newview/rlvhandler.cpp @@ -57,6 +57,12 @@ #include "rlvui.h" #include "rlvextensions.h" +// [FS communication UI] +#include "fsfloatervoicecontrols.h" +// [FS communication UI] +#include "fslslbridge.h" +#include "fsradar.h" + // Boost includes #include @@ -1589,7 +1595,7 @@ void RlvBehaviourToggleHandler::onCommandToggle(ERlvBehaviour eBh // Hide the build floater if it's currently visible if (LLFloaterReg::instanceVisible("build")) - LLToolMgr::instance().toggleBuildMode(); + LLToolMgr::instance().toggleBuildMode("toggleonly"); } // Start or stop filtering opening the beacons floater @@ -1907,6 +1913,10 @@ void RlvBehaviourToggleHandler::onCommandToggle(ERlvBehaviour LLFloaterReg::const_instance_list_t invFloaters = LLFloaterReg::getFloaterList("inventory"); for (LLFloater* pFloater : invFloaters) pFloater->closeFloater(); + + LLFloaterReg::const_instance_list_t lSecFloaters = LLFloaterReg::getFloaterList("secondary_inventory"); + for (LLFloaterReg::const_instance_list_t::const_iterator itSecFloater = lSecFloaters.begin(); itSecFloater != lSecFloaters.end(); ++itSecFloater) + (*itSecFloater)->closeFloater(); } // @@ -1941,10 +1951,17 @@ void RlvBehaviourToggleHandler::onCommandToggle(ERlvBehaviour // // Filter (or stop filtering) opening new inventory floaters // + // Modified for FIRE-8804 if (fHasBhvr) + { RlvUIEnabler::instance().addGenericFloaterFilter("inventory"); + RlvUIEnabler::instance().addGenericFloaterFilter("secondary_inventory"); + } else + { RlvUIEnabler::instance().removeGenericFloaterFilter("inventory"); + RlvUIEnabler::instance().removeGenericFloaterFilter("secondary_inventory"); + } } // Handles: @shownames[:]=n|y toggles @@ -1958,14 +1975,23 @@ void RlvBehaviourToggleHandler::onCommandToggle(ERlvBehaviou RlvActions::setShowName(RlvActions::SNC_DEFAULT, !fHasBhvr); // Refresh the nearby people list - LLPanelPeople* pPeoplePanel = LLFloaterSidePanelContainer::getPanel("people", "panel_people"); - RLV_ASSERT( (pPeoplePanel) && (pPeoplePanel->getNearbyList()) ); - if ( (pPeoplePanel) && (pPeoplePanel->getNearbyList()) ) - { - if (pPeoplePanel->getNearbyList()->isInVisibleChain()) - pPeoplePanel->onCommit(); - pPeoplePanel->getNearbyList()->updateAvatarNames(); - } + // [Standalone radar] + //LLPanelPeople* pPeoplePanel = LLFloaterSidePanelContainer::getPanel("people", "panel_people"); + //RLV_ASSERT( (pPeoplePanel) && (pPeoplePanel->getNearbyList()) ); + //if ( (pPeoplePanel) && (pPeoplePanel->getNearbyList()) ) + // pPeoplePanel->getNearbyList()->updateAvatarNames(); + FSRadar* pRadar = FSRadar::getInstance(); + RLV_ASSERT( (pRadar) ); + if ( (pRadar) ) + pRadar->updateNames(); + // [Standalone radar] + + // Refresh the speaker list + // [FS communication UI] + FSFloaterVoiceControls* pCallFloater = LLFloaterReg::findTypedInstance("fs_voice_controls"); + if (pCallFloater) + pCallFloater->getAvatarCallerList()->updateAvatarNames(); + // [FS communication UI] // Force the use of the "display name" cache so we can filter both display and legacy names (or return back to the user's preference) if (fHasBhvr) @@ -2084,7 +2110,7 @@ ERlvCmdRet RlvHandler::processForceCommand(const RlvCommand& rlvCmd) const { F32 nValue = (rlvCmdOption.m_nPelvisToFoot - gAgentAvatarp->getPelvisToFoot()) * rlvCmdOption.m_nPelvisToFootDeltaMult; nValue += rlvCmdOption.m_nPelvisToFootOffset; - if (gAgentAvatarp->getRegion()->avatarHoverHeightEnabled()) + if (gAgentAvatarp->getRegion()->avatarHoverHeightEnabled() || !gAgentAvatarp->isUsingServerBakes()) { LLVector3 avOffset(0.0, 0.0, llclamp(nValue, MIN_HOVER_Z, MAX_HOVER_Z)); gSavedPerAccountSettings.setF32("AvatarHoverOffsetZ", avOffset.mV[VZ]); @@ -2687,7 +2713,9 @@ ERlvCmdRet RlvHandler::onGetAttach(const RlvCommand& rlvCmd, std::string& strRep const LLViewerJointAttachment* pAttachPt = itAttach->second; if ( (0 == idxAttachPt) || (itAttach->first == idxAttachPt) ) { - bool fWorn = (pAttachPt->getNumObjects() > 0) && + // Ansa: Do not include the bridge when checking for number of objects + S32 bridge_correct = (pAttachPt->getName() == FS_BRIDGE_ATTACHMENT_POINT_NAME && FSLSLBridge::instance().isBridgeValid()) ? 1 : 0; + bool fWorn = ((pAttachPt->getNumObjects() - bridge_correct) > 0) && ( (!RlvSettings::getHideLockedAttach()) || (RlvForceWear::isForceDetachable(pAttachPt, true, rlvCmd.getObjectID())) ); strReply.push_back( (fWorn) ? '1' : '0' ); } @@ -2716,7 +2744,11 @@ ERlvCmdRet RlvHandler::onGetAttachNames(const RlvCommand& rlvCmd, std::string& s switch (rlvCmd.getBehaviourType()) { case RLV_BHVR_GETATTACHNAMES: // Every attachment point that has an attached object - fAdd = (pAttachPt->getNumObjects() > 0); + // Ansa: Do not include the bridge when checking for number of objects + { + S32 bridge_correct = ((pAttachPt->getName() == FS_BRIDGE_ATTACHMENT_POINT_NAME && FSLSLBridge::instance().isBridgeValid()) ? 1 : 0); + fAdd = ((pAttachPt->getNumObjects() - bridge_correct) > 0); + } break; case RLV_BHVR_GETADDATTACHNAMES: // Every attachment point that can be attached to (wear replace OR wear add) fAdd = (gRlvAttachmentLocks.canAttach(pAttachPt) & RLV_WEAR); diff --git a/indra/newview/rlvhandler.h b/indra/newview/rlvhandler.h index 6cac8be2bd..3fa827727d 100644 --- a/indra/newview/rlvhandler.h +++ b/indra/newview/rlvhandler.h @@ -20,9 +20,9 @@ #include #include "rlvcommon.h" -#if LL_GNUC +//#if LL_GNUC #include "rlvhelper.h" // Needed to make GCC happy -#endif // LL_GNUC +//#endif // LL_GNUC // ============================================================================ diff --git a/indra/newview/rlvhelper.cpp b/indra/newview/rlvhelper.cpp index 4805c26f53..09a1da3bbe 100644 --- a/indra/newview/rlvhelper.cpp +++ b/indra/newview/rlvhelper.cpp @@ -21,6 +21,10 @@ #include "llnotificationsutil.h" #include "llviewerobjectlist.h" +// FIRE-4453 bridge detached by the RLV command @remattach=force +#include "fslslbridge.h" +// FIRE-4453 + #include "rlvcommon.h" #include "rlvhelper.h" #include "rlvhandler.h" @@ -1132,6 +1136,9 @@ bool RlvForceWear::isForceDetachable(const LLViewerObject* pAttachObj, bool fChe // - it's not "remove locked" by anything (or anything except the object specified by pExceptObj) // - it's strippable // - composite folders are disabled *or* it isn't part of a composite folder that has at least one item locked + // FIRE-4453 bridge detached by the RLV command @remattach=force + // - it's not the LSL bridge, which should never be affected by RLV + // FIRE-4453 #ifdef RLV_EXPERIMENTAL_COMPOSITEFOLDERS LLViewerInventoryCategory* pFolder = NULL; #endif // RLV_EXPERIMENTAL_COMPOSITEFOLDERS @@ -1141,6 +1148,9 @@ bool RlvForceWear::isForceDetachable(const LLViewerObject* pAttachObj, bool fChe && ( (idExcept.isNull()) ? (!gRlvAttachmentLocks.isLockedAttachment(pAttachObj)) : (!gRlvAttachmentLocks.isLockedAttachmentExcept(pAttachObj, idExcept)) ) && (isStrippable(pAttachObj->getAttachmentItemID())) + // FIRE-4453 bridge detached by the RLV command @remattach=force + && (pAttachObj->getID() != FSLSLBridge::instance().getAttachedID()) + // FIRE-4453 #ifdef RLV_EXPERIMENTAL_COMPOSITEFOLDERS && ( (!fCheckComposite) || (!RlvSettings::getEnableComposites()) || (!gRlvHandler.getCompositeInfo(pAttachPt->getItemID(), NULL, &pFolder)) || (gRlvHandler.canTakeOffComposite(pFolder)) ) diff --git a/indra/newview/rlvinventory.cpp b/indra/newview/rlvinventory.cpp index 879ca8943c..5dad1ac716 100644 --- a/indra/newview/rlvinventory.cpp +++ b/indra/newview/rlvinventory.cpp @@ -411,7 +411,7 @@ void RlvRenameOnWearObserver::doneIdle() } const LLViewerJointAttachment* pAttachPt = NULL; S32 idxAttachPt = 0; - RLV_ASSERT(mComplete.size() > 0); // Catch instances where we forgot to call startFetch() + //RLV_ASSERT(mComplete.size() > 0); // Catch instances where we forgot to call startFetch() for (uuid_vec_t::const_iterator itItem = mComplete.begin(); itItem != mComplete.end(); ++itItem) { const LLUUID& idAttachItem = *itItem; diff --git a/indra/newview/rlvlocks.cpp b/indra/newview/rlvlocks.cpp index d7f86b81b7..0738e126ca 100644 --- a/indra/newview/rlvlocks.cpp +++ b/indra/newview/rlvlocks.cpp @@ -15,6 +15,7 @@ */ #include "llviewerprecompiledheaders.h" +#include "fslslbridge.h" #include "llagent.h" #include "llappearancemgr.h" #include "llattachmentsmgr.h" @@ -658,6 +659,13 @@ void RlvAttachmentLockWatchdog::onDetach(const LLViewerObject* pAttachObj, const if ( (!idxAttachPt) || (idAttachItem.isNull()) ) return; + // Bridge can always be detached + if (FSLSLBridge::instance().canDetach(idAttachItem)) + { + return; + } + // + // If it's an attachment that's pending force-detach then we don't want to do anything (even if it's currently "remove locked") rlv_detach_map_t::iterator itDetach = std::find(m_PendingDetach.begin(), m_PendingDetach.end(), idAttachItem); if (itDetach != m_PendingDetach.end()) diff --git a/indra/newview/rlvui.cpp b/indra/newview/rlvui.cpp index 26acef9490..eb797c2e0d 100644 --- a/indra/newview/rlvui.cpp +++ b/indra/newview/rlvui.cpp @@ -195,15 +195,27 @@ void RlvUIEnabler::onToggleShowMinimap() // Break/reestablish the visibility connection for the nearby people panel embedded minimap instance LLPanel* pPeoplePanel = LLFloaterSidePanelContainer::getPanel("people", "panel_people"); - LLPanel* pNetMapPanel = (pPeoplePanel) ? pPeoplePanel->findChild("Net Map Panel", TRUE) : NULL; + LLPanel* pNetMapPanel = (pPeoplePanel) ? pPeoplePanel->getChild("minimaplayout", TRUE) : NULL; //AO: firestorm specific RLV_ASSERT( (pPeoplePanel) && (pNetMapPanel) ); if (pNetMapPanel) { - pNetMapPanel->setMakeVisibleControlVariable( (fEnable) ? gSavedSettings.getControl("NearbyListShowMap").get() : NULL); + pNetMapPanel->setMakeVisibleControlVariable( (fEnable) ? gSavedSettings.getControl("ShowRadarMinimap").get() : NULL); // Reestablishing the visiblity connection will show the panel if needed so we only need to take care of hiding it when needed if ( (!fEnable) && (pNetMapPanel->getVisible()) ) pNetMapPanel->setVisible(false); } + + // Break/reestablish the visibility connection for the radar panel embedded minimap instance + LLFloater* pRadarFloater = LLFloaterReg::getInstance("fs_radar"); + LLPanel* pRadarNetMapPanel = (pRadarFloater) ? pRadarFloater->getChild("minimaplayout", TRUE) : NULL; //AO: firestorm specific + RLV_ASSERT( (pRadarFloater) && (pRadarNetMapPanel) ); + if (pRadarNetMapPanel) + { + pRadarNetMapPanel->setMakeVisibleControlVariable( (fEnable) ? gSavedSettings.getControl("ShowRadarMinimap").get() : NULL); + // Reestablishing the visiblity connection will show the panel if needed so we only need to take care of hiding it when needed + if ( (!fEnable) && (pRadarNetMapPanel->getVisible()) ) + pRadarNetMapPanel->setVisible(false); + } } // Checked: 2010-02-28 (RLVa-1.4.0a) | Added: RLVa-1.2.0a @@ -415,7 +427,10 @@ bool RlvUIEnabler::canViewRegionProperties() bool RlvUIEnabler::hasOpenIM(const LLUUID& idAgent) { LLUUID idSession = LLIMMgr::computeSessionID(IM_NOTHING_SPECIAL, idAgent); - return (NULL != LLFloaterReg::findInstance("impanel", idSession)); + // [FS communication UI] + //return (NULL != LLFloaterReg::findInstance("impanel", idSession)); + return (NULL != LLFloaterReg::findInstance("fs_impanel", idSession)); + // [FS communication UI] } // Checked: 2011-11-04 (RLVa-1.4.4a) | Modified: RLVa-1.4.4a @@ -432,7 +447,10 @@ bool RlvUIEnabler::hasOpenProfile(const LLUUID& idAgent) // Checked: 2010-09-11 (RLVa-1.2.1d) | Added: RLVa-1.2.1d bool RlvUIEnabler::isBuildEnabled() { - return (gAgent.canEditParcel()) && ((!gRlvHandler.hasBehaviour(RLV_BHVR_EDIT)) || (!gRlvHandler.hasBehaviour(RLV_BHVR_REZ))); + // FIRE-1432: Build button not properly updated + //return (gAgent.canEditParcel()) && ((!gRlvHandler.hasBehaviour(RLV_BHVR_EDIT)) || (!gRlvHandler.hasBehaviour(RLV_BHVR_REZ))); + return (LLViewerParcelMgr::getInstance()->allowAgentBuild()) && ((!gRlvHandler.hasBehaviour(RLV_BHVR_EDIT)) || (!gRlvHandler.hasBehaviour(RLV_BHVR_REZ))); + // } // ============================================================================