Merge Firestorm LGPL

master
Ansariel 2016-07-20 20:36:07 +02:00
commit a1a1723b14
44 changed files with 479 additions and 161 deletions

View File

@ -27,9 +27,9 @@
<key>archive</key>
<map>
<key>hash</key>
<string>e54568cfa7bced82cb6eae26471b7fa5</string>
<string>68bf8ef0e36e52a995fbe5a4889d5065</string>
<key>url</key>
<string>http://downloads.phoenixviewer.com/slplugin_x86-4.7.8.50261-darwin-201606211711-r3.tar.bz2</string>
<string>http://downloads.phoenixviewer.com/slplugin_x86-4.7.8.50451-darwin-201607130911-r5.tar.bz2</string>
</map>
<key>name</key>
<string>windows</string>
@ -2231,9 +2231,9 @@
<key>archive</key>
<map>
<key>hash</key>
<string>06c3a9b1005249f0c94a8b9f3775f3d3</string>
<string>6e7b0961d6489a1b3c3090eccfd6e80e</string>
<key>url</key>
<string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/vivox_3p-slvoice/rev/302004/arch/Linux/installer/slvoice-3.2.0002.10426.302004-linux-302004.tar.bz2</string>
<string>http://downloads.phoenixviewer.com/slvoice-3.2.0002.10426.298329-linux-20160717.tar.bz2</string>
</map>
<key>name</key>
<string>linux</string>

View File

@ -480,6 +480,9 @@ public:
// *WORKAROUND: two methods to overload appropriate Params due to localization issue:
// no_items_msg & no_filtered_items_msg attributes are not defined as translatable in VLT. See EXT-5931
// [RLVa:KB] - Checked: RLVa-2.0.3
const std::string& getNoItemsMsg() const { return mNoItemsMsg; }
// [/RLVa:KB]
void setNoItemsMsg(const std::string& msg) { mNoItemsMsg = msg; }
void setNoFilteredItemsMsg(const std::string& msg) { mNoFilteredItemsMsg = msg; }

View File

@ -1 +1 @@
4.7.8
4.7.10

View File

@ -24042,10 +24042,10 @@ Change of this parameter will affect the layout of buttons in notification toast
<key>Value</key>
<integer>0</integer>
</map>
<key>FSTagShowTooComplexARW</key>
<key>FSTagShowARW</key>
<map>
<key>Comment</key>
<string>If enabled, the avatar complexity will be shown in the nametag for too complex avatars (Jelly Dolls)</string>
<string>If enabled, the avatar complexity will be shown in the nametag for every avatar.</string>
<key>Persist</key>
<integer>1</integer>
<key>Type</key>
@ -24053,10 +24053,32 @@ Change of this parameter will affect the layout of buttons in notification toast
<key>Value</key>
<integer>1</integer>
</map>
<key>FSTagAlwaysShowARW</key>
<key>FSTagShowOwnARW</key>
<map>
<key>Comment</key>
<string>If enabled, the avatar complexity will be shown in the nametag for every avatar.</string>
<string>If enabled, the avatar complexity for the own avatar will be shown in the nametag.</string>
<key>Persist</key>
<integer>1</integer>
<key>Type</key>
<string>Boolean</string>
<key>Value</key>
<integer>0</integer>
</map>
<key>FSTagShowTooComplexOnlyARW</key>
<map>
<key>Comment</key>
<string>If enabled, the avatar complexity will be shown in the nametag only for too complex avatars (Jelly Dolls)</string>
<key>Persist</key>
<integer>1</integer>
<key>Type</key>
<string>Boolean</string>
<key>Value</key>
<integer>1</integer>
</map>
<key>FSLinuxEnableWin32VoiceProxy</key>
<map>
<key>Comment</key>
<string>Use Win32 SLVoice.exe for voice. Needs wine (https://www.winehq.org/) installed, as SLVoice.exe is started inside wine.</string>
<key>Persist</key>
<integer>1</integer>
<key>Type</key>

View File

@ -1968,13 +1968,13 @@ BOOL FSPanelSearchClassifieds::postBuild()
if (mClassifiedsCategory)
{
LLClassifiedInfo::cat_map::iterator iter;
mClassifiedsCategory->add(LLTrans::getString("all_categories"), LLSD("any"));
mClassifiedsCategory->add(LLTrans::getString("all_categories"), LLSD(0));
mClassifiedsCategory->addSeparator();
for (iter = LLClassifiedInfo::sCategories.begin();
iter != LLClassifiedInfo::sCategories.end();
iter++)
{
mClassifiedsCategory->add(LLTrans::getString(iter->second));
mClassifiedsCategory->add(LLTrans::getString(iter->second), LLSD((S32)iter->first));
}
}
childSetAction("classifieds_next", boost::bind(&FSPanelSearchClassifieds::onBtnNext, this));
@ -2008,7 +2008,7 @@ void FSPanelSearchClassifieds::find()
LLNotificationsUtil::add("NoContentToSearch");
return;
}
U32 category = childGetValue("classifieds_category").asInteger();
U32 category = mClassifiedsCategory->getValue().asInteger();
BOOL auto_renew = FALSE;
U32 flags = pack_classified_flags_request(auto_renew, inc_pg, inc_mature, inc_adult);

View File

@ -54,6 +54,8 @@
#include "llfirstuse.h"
#include "llsliderctrl.h"
#include "lltextbox.h"
#include "rlvcommon.h"
static void get_voice_participants_uuids(uuid_vec_t& speakers_uuids);
void reshape_floater(FSFloaterVoiceControls* floater, S32 delta_height);
@ -112,6 +114,7 @@ FSFloaterVoiceControls::FSFloaterVoiceControls(const LLSD& key)
, mInitParticipantsVoiceState(false)
, mVolumeSlider(NULL)
, mMuteButton(NULL)
, mIsRlvShowNearbyRestricted(false)
{
static LLUICachedControl<S32> voice_left_remove_delay ("VoiceParticipantLeftRemoveDelay", 10);
mSpeakerDelayRemover = new LLSpeakersDelayActionsStorage(boost::bind(&FSFloaterVoiceControls::removeVoiceLeftParticipant, this, _1), voice_left_remove_delay);
@ -158,6 +161,9 @@ BOOL FSFloaterVoiceControls::postBuild()
mVolumeSlider = findChild<LLSliderCtrl>("volume_slider");
mMuteButton = findChild<LLButton>("mute_btn");
mRlvRestrictedText = getChild<LLTextBox>("rlv_restricted");
mRlvRestrictedText->setText(RlvStrings::getString("blocked_nearby"));
if (mVolumeSlider && mMuteButton)
{
mAvatarList->setCommitCallback(boost::bind(&FSFloaterVoiceControls::onParticipantSelected, this));
@ -350,8 +356,10 @@ void FSFloaterVoiceControls::refreshParticipantList()
mNonAvatarCaller->setName(session->mName);
}
mNonAvatarCaller->setVisible(non_avatar_caller);
mAvatarList->setVisible(!non_avatar_caller);
// Ansariel: Changed for RLVa @shownearby
//mNonAvatarCaller->setVisible(non_avatar_caller);
//mAvatarList->setVisible(!non_avatar_caller);
updateListVisibility();
if (!non_avatar_caller)
{
@ -885,10 +893,45 @@ void FSFloaterVoiceControls::reset(const LLVoiceChannel::EState& new_state)
mAvatarList->setNoItemsCommentText(LLTrans::getString("LoadingData"));
}
mAvatarList->setVisible(TRUE);
mNonAvatarCaller->setVisible(FALSE);
// Ansariel: Changed for RLVa @shownearby
//mAvatarList->setVisible(TRUE);
//mNonAvatarCaller->setVisible(FALSE);
updateListVisibility();
mSpeakerManager = NULL;
}
void FSFloaterVoiceControls::toggleRlvShowNearbyRestriction(bool restricted)
{
mIsRlvShowNearbyRestricted = restricted;
updateListVisibility();
}
void FSFloaterVoiceControls::updateListVisibility()
{
if (mIsRlvShowNearbyRestricted && mVoiceType == VC_LOCAL_CHAT)
{
mAvatarList->setVisible(FALSE);
mNonAvatarCaller->setVisible(FALSE);
mRlvRestrictedText->setVisible(TRUE);
}
else
{
mRlvRestrictedText->setVisible(FALSE);
if (mParticipants)
{
// Case coming from refreshParticipantList
bool non_avatar_caller = VC_PEER_TO_PEER_AVALINE == mVoiceType;
mNonAvatarCaller->setVisible(non_avatar_caller);
mAvatarList->setVisible(!non_avatar_caller);
}
else
{
// Case coming from reset()
mAvatarList->setVisible(TRUE);
mNonAvatarCaller->setVisible(FALSE);
}
}
}
//EOF

View File

@ -43,6 +43,7 @@ class LLOutputMonitorCtrl;
class LLSpeakerMgr;
class LLSpeakersDelayActionsStorage;
class LLSliderCtrl;
class LLTextBox;
/**
* The Voice Control Panel is an ambient window summoned by clicking the flyout chevron
@ -82,6 +83,8 @@ public:
LLAvatarList* getAvatarCallerList() { return mAvatarList; }
// [/RLVa:KB]
void toggleRlvShowNearbyRestriction(bool restricted);
private:
typedef enum e_voice_controls_type
{
@ -248,6 +251,8 @@ private:
*/
void reset(const LLVoiceChannel::EState& new_state);
void updateListVisibility();
private:
speaker_state_map_t mSpeakerStateMap;
LLSpeakerMgr* mSpeakerManager;
@ -258,10 +263,12 @@ private:
LLPanel* mAgentPanel;
LLOutputMonitorCtrl* mSpeakingIndicator;
bool mIsModeratorMutedVoice;
bool mIsRlvShowNearbyRestricted;
LLUUID mSelectedParticipant;
LLSliderCtrl* mVolumeSlider;
LLButton* mMuteButton;
LLTextBox* mRlvRestrictedText;
/**
* Flag indicated that participants voice states should be initialized.

View File

@ -42,6 +42,7 @@
#include "llpanelblockedlist.h"
#include "llviewercontrol.h" // for gSavedSettings
#include "llviewermenu.h" // for gMenuHolder
#include "rlvactions.h"
#include "rlvhandler.h"
@ -321,6 +322,11 @@ void FSPanelRadar::updateList(const std::vector<LLSD>& entries, const LLSD& stat
S32 lastScroll = mRadarList->getScrollPos();
// Update list
mRadarList->setCommentText(RlvActions::canShowNearbyAgents() ? LLStringUtil::null : RlvStrings::getString("blocked_nearby"));
bool needs_sort = mRadarList->isSorted();
mRadarList->setNeedsSort(false);
mRadarList->clearRows();
const std::vector<LLSD>::const_iterator it_end = entries.end();
for (std::vector<LLSD>::const_iterator it = entries.begin(); it != it_end; ++it)
@ -408,6 +414,9 @@ void FSPanelRadar::updateList(const std::vector<LLSD>& entries, const LLSD& stat
}
}
mRadarList->setNeedsSort(needs_sort);
mRadarList->updateSort();
LLStringUtil::format_map_t name_count_args;
name_count_args["[TOTAL]"] = stats["total"].asString();
name_count_args["[IN_REGION]"] = stats["region"].asString();

View File

@ -55,8 +55,9 @@
#include "llvoiceclient.h"
#include "llworld.h"
#include "llspeakers.h"
#include "rlvhandler.h"
#include "llviewerregion.h"
#include "rlvactions.h"
#include "rlvhandler.h"
using namespace boost;
@ -229,13 +230,16 @@ void FSRadar::updateRadarList()
std::vector<LLVector3d> positions;
uuid_vec_t avatar_ids;
std::map<LLUUID, LLUUID> region_assignments;
if (sLimitRange)
if (RlvActions::canShowNearbyAgents())
{
world->getAvatars(&avatar_ids, &positions, gAgent.getPositionGlobal(), sNearMeRange, &region_assignments);
}
else
{
world->getAvatars(&avatar_ids, &positions, LLVector3d(), FLT_MAX, &region_assignments);
if (sLimitRange)
{
world->getAvatars(&avatar_ids, &positions, gAgent.getPositionGlobal(), sNearMeRange, &region_assignments);
}
else
{
world->getAvatars(&avatar_ids, &positions, LLVector3d(), FLT_MAX, &region_assignments);
}
}
// Determine lists of new added and removed avatars
@ -680,33 +684,35 @@ void FSRadar::updateRadarList()
//3b: process alerts for avatars that where here last frame, but gone this frame (ie, they left)
// as well as dispatch all earlier detected alerts for crossing range thresholds.
//
radarfields_map_t::iterator rf_it_end = mLastRadarSweep.end();
for (radarfields_map_t::iterator i = mLastRadarSweep.begin(); i != rf_it_end; ++i)
if (RlvActions::canShowNearbyAgents())
{
LLUUID prevId = i->first;
RadarFields rf = i->second;
if ((sFSRadarShowMutedAndDerendered || !rf.lastIgnore) && mEntryList.find(prevId) == mEntryList.end())
radarfields_map_t::iterator rf_it_end = mLastRadarSweep.end();
for (radarfields_map_t::iterator i = mLastRadarSweep.begin(); i != rf_it_end; ++i)
{
if (sRadarReportChatRangeLeave && (rf.lastDistance <= chat_range_say) && rf.lastDistance > AVATAR_UNKNOWN_RANGE)
LLUUID prevId = i->first;
RadarFields rf = i->second;
if ((sFSRadarShowMutedAndDerendered || !rf.lastIgnore) && mEntryList.find(prevId) == mEntryList.end())
{
make_ui_sound("UISndRadarChatLeave"); // <FS:PP> FIRE-6069: Radar alerts sounds
LLAvatarNameCache::get(prevId, boost::bind(&FSRadar::radarAlertMsg, this, _1, _2, str_chat_leaving));
}
if (sRadarReportDrawRangeLeave && (rf.lastDistance <= drawRadius) && rf.lastDistance > AVATAR_UNKNOWN_RANGE)
{
make_ui_sound("UISndRadarDrawLeave"); // <FS:PP> FIRE-6069: Radar alerts sounds
LLAvatarNameCache::get(prevId, boost::bind(&FSRadar::radarAlertMsg, this, _1, _2, str_draw_distance_leaving));
}
if (sRadarReportSimRangeLeave && (rf.lastRegion == regionSelf || rf.lastRegion.isNull()))
{
make_ui_sound("UISndRadarSimLeave"); // <FS:PP> FIRE-6069: Radar alerts sounds
LLAvatarNameCache::get(prevId, boost::bind(&FSRadar::radarAlertMsg, this, _1, _2, str_region_leaving));
}
if (sRadarLeaveChannelAlert)
{
mRadarLeaveAlerts.push_back(prevId);
if (sRadarReportChatRangeLeave && (rf.lastDistance <= chat_range_say) && rf.lastDistance > AVATAR_UNKNOWN_RANGE)
{
make_ui_sound("UISndRadarChatLeave"); // <FS:PP> FIRE-6069: Radar alerts sounds
LLAvatarNameCache::get(prevId, boost::bind(&FSRadar::radarAlertMsg, this, _1, _2, str_chat_leaving));
}
if (sRadarReportDrawRangeLeave && (rf.lastDistance <= drawRadius) && rf.lastDistance > AVATAR_UNKNOWN_RANGE)
{
make_ui_sound("UISndRadarDrawLeave"); // <FS:PP> FIRE-6069: Radar alerts sounds
LLAvatarNameCache::get(prevId, boost::bind(&FSRadar::radarAlertMsg, this, _1, _2, str_draw_distance_leaving));
}
if (sRadarReportSimRangeLeave && (rf.lastRegion == regionSelf || rf.lastRegion.isNull()))
{
make_ui_sound("UISndRadarSimLeave"); // <FS:PP> FIRE-6069: Radar alerts sounds
LLAvatarNameCache::get(prevId, boost::bind(&FSRadar::radarAlertMsg, this, _1, _2, str_region_leaving));
}
if (sRadarLeaveChannelAlert)
{
mRadarLeaveAlerts.push_back(prevId);
}
}
}
}
@ -797,10 +803,18 @@ void FSRadar::updateRadarList()
//
//STEP 5: Final data updates and notification of subscribers
//
mAvatarStats["total"] = llformat("%d", mLastRadarSweep.size() - 1);
mAvatarStats["region"] = llformat("%d", inSameRegion);
mAvatarStats["chatrange"] = llformat("%d", inChatRange);
if (RlvActions::canShowNearbyAgents())
{
mAvatarStats["total"] = llformat("%d", mLastRadarSweep.size() - 1);
mAvatarStats["region"] = llformat("%d", inSameRegion);
mAvatarStats["chatrange"] = llformat("%d", inChatRange);
}
else
{
mAvatarStats["total"] = "-";
mAvatarStats["region"] = "-";
mAvatarStats["chatrange"] = "-";
}
checkTracking();

View File

@ -300,6 +300,10 @@ void LLAvatarList::draw()
void LLAvatarList::clear()
{
getIDs().clear();
// [RLVa:KB] - Checked: RLVa-2.0.3
// We need to be able to call this *somehow* and it actually makes moderate sense to call this in here
updateNoItemsMessage(mNameFilter);
// [/RLVa:KB]
setDirty(true);
LLFlatListViewEx::clear();
}

View File

@ -767,6 +767,8 @@ BOOL LLFloaterPreference::postBuild()
// <FS:Ansariel> Properly disable avatar tag setting
gSavedSettings.getControl("NameTagShowUsernames")->getCommitSignal()->connect(boost::bind(&LLFloaterPreference::onAvatarTagSettingsChanged, this));
gSavedSettings.getControl("FSNameTagShowLegacyUsernames")->getCommitSignal()->connect(boost::bind(&LLFloaterPreference::onAvatarTagSettingsChanged, this));
gSavedSettings.getControl("AvatarNameTagMode")->getCommitSignal()->connect(boost::bind(&LLFloaterPreference::onAvatarTagSettingsChanged, this));
gSavedSettings.getControl("FSTagShowARW")->getCommitSignal()->connect(boost::bind(&LLFloaterPreference::onAvatarTagSettingsChanged, this));
onAvatarTagSettingsChanged();
// </FS:Ansariel>
@ -3403,6 +3405,10 @@ void LLFloaterPreference::onAvatarTagSettingsChanged()
childSetEnabled("FSshow_legacyun", usernames_enabled);
childSetEnabled("legacy_trim_check", usernames_enabled && legacy_enabled);
bool arw_options_enabled = gSavedSettings.getBOOL("FSTagShowARW") && gSavedSettings.getS32("AvatarNameTagMode") > 0;
childSetEnabled("FSTagShowTooComplexOnlyARW", arw_options_enabled);
childSetEnabled("FSTagShowOwnARW", arw_options_enabled);
}
// </FS:Ansariel>

View File

@ -259,7 +259,7 @@ void LLHUDText::setString(const std::string &text_utf8)
{
mTextSegments.clear();
// addLine(text_utf8, mColor);
// [RLVa:KB] - Checked: 2010-03-02 (RLVa-1.4.0a) | Modified: RLVa-1.0.0f
// [RLVa:KB] - Checked: RLVa-2.0.3
// NOTE: setString() is called for debug and map beacons as well
if (RlvActions::isRlvEnabled())
{
@ -268,8 +268,10 @@ void LLHUDText::setString(const std::string &text_utf8)
{
if (!RlvActions::canShowLocation())
RlvUtil::filterLocation(text);
if (!RlvActions::canShowName(RlvActions::SNC_DEFAULT))
RlvUtil::filterNames(text);
bool fCanShowNearby = RlvActions::canShowNearbyAgents();
if ( (!RlvActions::canShowName(RlvActions::SNC_DEFAULT)) || (!fCanShowNearby) )
RlvUtil::filterNames(text, true, !fCanShowNearby);
}
else
{
@ -671,14 +673,16 @@ F32 LLHUDText::LLHUDTextSegment::getWidth(const LLFontGL* font)
}
}
// [RLVa:KB] - Checked: 2010-03-27 (RLVa-1.4.0a) | Added: RLVa-1.0.0f
void LLHUDText::refreshAllObjectText()
// [RLVa:KB] - Checked: RLVa-2.0.3
void LLHUDText::refreshAllObjectText(EObjectTextFilter eObjFilter)
{
for (TextObjectIterator itText = sTextObjects.begin(); itText != sTextObjects.end(); ++itText)
for (LLHUDText* pText : sTextObjects)
{
LLHUDText* pText = *itText;
if ( (pText) && (!pText->mObjText.empty()) && (pText->mSourceObject) && (LL_PCODE_VOLUME == pText->mSourceObject->getPCode()) )
if ((pText) && (!pText->mObjText.empty()) && (pText->mSourceObject) && (LL_PCODE_VOLUME == pText->mSourceObject->getPCode()) &&
((OTF_NONE == eObjFilter) || ((OTF_HUD_ATTACHMENTS == eObjFilter) && (pText->mSourceObject->isHUDAttachment()))))
{
pText->setString(pText->mObjText);
}
}
}
// [/RLVa:KB]

View File

@ -124,10 +124,12 @@ public:
static void reshape();
static void setDisplayText(BOOL flag) { sDisplayText = flag ; }
// [RLVa:KB] - Checked: 2010-03-27 (RLVa-1.4.0a) | Added: RLVa-1.0.0f
// [RLVa:KB] - Checked: RLVa-2.0.3
const std::string& getObjectText() const { return mObjText; }
void setObjectText(const std::string &utf8string) { mObjText = utf8string; }
static void refreshAllObjectText();
enum EObjectTextFilter { OTF_NONE, OTF_HUD_ATTACHMENTS };
static void refreshAllObjectText(EObjectTextFilter eObjFilter = OTF_NONE);
// [/RLVa:KB]
// <FS:Ansariel> FIRE-17393: Control HUD text fading by options
@ -170,7 +172,7 @@ private:
ETextAlignment mTextAlignment;
EVertAlignment mVertAlignment;
BOOL mHidden;
// [RLVa:KB] - Checked: 2010-03-27 (RLVa-1.4.0a) | Added: RLVa-1.0.0f
// [RLVa:KB] - Checked: RLVa-1.0.0
std::string mObjText;
// [/RLVa:KB]

View File

@ -4153,7 +4153,7 @@ F32 LLMeshRepository::getStreamingCost(LLSD& header, F32 radius, S32* bytes, S32
}
}
F32 max_area = 102932.f; //area of circle that encompasses region
F32 max_area = 102944.f; //area of circle that encompasses region (see MAINT-6559)
F32 min_area = 1.f;
F32 high_area = llmin(F_PI*dmid*dmid, max_area);

View File

@ -949,7 +949,18 @@ void LLPanelPeople::updateNearbyList()
std::vector<LLVector3d> positions;
LLWorld::getInstance()->getAvatars(&mNearbyList->getIDs(), &positions, gAgent.getPositionGlobal(), gSavedSettings.getF32("NearMeRange"));
// [RLVa:KB] - Checked: RLVa-2.0.3
if (RlvActions::canShowNearbyAgents())
{
// [/RLVa:KB]
LLWorld::getInstance()->getAvatars(&mNearbyList->getIDs(), &positions, gAgent.getPositionGlobal(), gSavedSettings.getF32("NearMeRange"));
// [RLVa:KB] - Checked: RLVa-2.0.3
}
else
{
mNearbyList->getIDs().clear();
}
// [/RLVa:KB]
mNearbyList->setDirty();
DISTANCE_COMPARATOR.updateAvatarsPositions(positions, mNearbyList->getIDs());
@ -1080,16 +1091,6 @@ void LLPanelPeople::updateButtons()
}
}
}
// [RLVa:KB] - Checked: RLVa-1.2.0
if ( (nearby_tab_active) && (RlvActions::isRlvEnabled()) && (!RlvActions::canShowName(RlvActions::SNC_DEFAULT)) )
{
bool fCanShowNames = true;
std::for_each(selected_uuids.begin(), selected_uuids.end(), [&fCanShowNames](const LLUUID& idAgent) { fCanShowNames &= RlvActions::canShowName(RlvActions::SNC_DEFAULT, idAgent); });
if (!fCanShowNames)
item_selected = multiple_selected = false;
}
// [/RLBa:KB]
}
std::string LLPanelPeople::getActiveTabName() const
@ -1337,10 +1338,11 @@ void LLPanelPeople::onAvatarListDoubleClicked(LLUICtrl* ctrl)
}
// [RLVa:KB] - Checked: RLVa-2.0.1
if ( (RlvActions::isRlvEnabled()) && (NEARBY_TAB_NAME == getActiveTabName()) && (!RlvActions::canShowName(RlvActions::SNC_DEFAULT, clicked_id)) )
{
return;
}
// <FS:Ansariel> Firestorm radar; commented out
//if ( (RlvActions::isRlvEnabled()) && (NEARBY_TAB_NAME == getActiveTabName()) && (!RlvActions::canShowName(RlvActions::SNC_DEFAULT, clicked_id)) )
//{
// return;
//}
// [/RLVa:KB]
#if 0 // SJB: Useful for testing, but not currently functional or to spec
@ -1460,13 +1462,14 @@ void LLPanelPeople::onImButtonClicked()
uuid_vec_t selected_uuids;
getCurrentItemIDs(selected_uuids);
// [RLVa:KB] - Checked: RLVa-2.0.1
if ( (RlvActions::isRlvEnabled()) && (NEARBY_TAB_NAME == getActiveTabName()) && (!RlvActions::canShowName(RlvActions::SNC_DEFAULT)) )
{
bool fCanShowNames = true;
std::for_each(selected_uuids.begin(), selected_uuids.end(), [&fCanShowNames](const LLUUID& idAgent) { fCanShowNames &= RlvActions::canShowName(RlvActions::SNC_DEFAULT, idAgent); });
if (!fCanShowNames)
return;
}
// <FS:Ansariel> Firestorm radar; commented out
//if ( (RlvActions::isRlvEnabled()) && (NEARBY_TAB_NAME == getActiveTabName()) && (!RlvActions::canShowName(RlvActions::SNC_DEFAULT)) )
//{
// bool fCanShowNames = true;
// std::for_each(selected_uuids.begin(), selected_uuids.end(), [&fCanShowNames](const LLUUID& idAgent) { fCanShowNames &= RlvActions::canShowName(RlvActions::SNC_DEFAULT, idAgent); });
// if (!fCanShowNames)
// return;
//}
// [/RLVa:KB]
if ( selected_uuids.size() == 1 )
{

View File

@ -71,6 +71,7 @@ public:
// [RLVa:KB] - Checked: RLVa-1.2.0
LLAvatarList* getNearbyList() { return mNearbyList; }
void updateNearbyList();
// [/RLVa:KB]
// internals
@ -94,7 +95,7 @@ private:
void updateFriendListHelpText();
void updateFriendList();
bool updateSuggestedFriendList();
void updateNearbyList();
// void updateNearbyList();
void updateRecentList();
void updateFacebookList(bool visible);

View File

@ -790,8 +790,11 @@ void LLStatusBar::onClickBuyCurrency()
void LLStatusBar::onMouseEnterPresets()
{
LLView* popup_holder = gViewerWindow->getRootView()->getChildView("popup_holder");
LLIconCtrl* icon = getChild<LLIconCtrl>( "presets_icon" );
LLRect icon_rect = icon->getRect();
// <FS:Ansariel> Changed presets icon to LLButton
//LLIconCtrl* icon = getChild<LLIconCtrl>( "presets_icon" );
//LLRect icon_rect = icon->getRect();
LLRect icon_rect = mIconPresets->getRect();
// </FS:Ansariel>
LLRect pulldown_rect = mPanelPresetsPulldown->getRect();
pulldown_rect.setLeftTopAndSize(icon_rect.mLeft -
(pulldown_rect.getWidth() - icon_rect.getWidth()),

View File

@ -6370,8 +6370,6 @@ void process_sim_stats(LLMessageSystem *msg, void **user_data)
{
// <FS:Ansariel> Cut down logspam
//LL_WARNS() << "Unknown sim stat identifier: " << stat_id << LL_ENDL;
LL_WARNS_ONCE() << "Unknown sim stat identifier: " << stat_id << LL_ENDL;
// </FS:Ansariel>
}
}

View File

@ -2319,7 +2319,7 @@ void LLViewerRegion::setSimulatorFeatures(const LLSD& sim_features)
std::stringstream str;
LLSDSerialize::toPrettyXML(sim_features, str);
LL_INFOS() << str.str() << LL_ENDL;
LL_INFOS() << "Region ID " << getRegionID().asString() << ": " << str.str() << LL_ENDL;
mSimulatorFeatures = sim_features;
setSimulatorFeaturesReceived(true);

View File

@ -3051,26 +3051,30 @@ void LLVOAvatar::idleUpdateNameTagText(BOOL new_name)
}
// </FS:Ansariel>
// <FS:Ansariel> Show Arc in nametag (for Jelly Dolls)
// <FS:TS> ...or everyone, if selected
static LLCachedControl<bool> show_too_complex_arw_tag(gSavedSettings, "FSTagShowTooComplexARW");
static LLCachedControl<bool> show_arw_always_tag(gSavedSettings, "FSTagAlwaysShowARW");
// <FS:Ansariel> Show ARW in nametag options (for Jelly Dolls)
static LLCachedControl<bool> show_arw_tag(gSavedSettings, "FSTagShowARW");
static LLCachedControl<bool> show_too_complex_only_arw_tag(gSavedSettings, "FSTagShowTooComplexOnlyARW");
static LLCachedControl<bool> show_own_arw_tag(gSavedSettings, "FSTagShowOwnARW");
U32 complexity(0);
LLColor4 complexity_color(LLColor4::grey1); // default if we're not limiting the complexity
if (!isSelf() && (show_arw_always_tag || (show_too_complex_arw_tag && isTooComplex())))
if (show_arw_tag &&
((isSelf() && show_own_arw_tag) ||
(!isSelf() && (!show_too_complex_only_arw_tag || isTooComplex()))))
{
complexity = mVisualComplexity;
// This calculation is copied from idleUpdateRenderComplexity()
// Show complexity color if we're limiting and not showing our own ARW...
static LLCachedControl<U32> max_render_cost(gSavedSettings, "RenderAvatarMaxComplexity", 0);
// Show complexity color if we're limiting...
if (max_render_cost != 0)
if (max_render_cost != 0 && !isSelf())
{
// This calculation is copied from idleUpdateRenderComplexity()
F32 green_level = 1.f - llclamp(((F32)complexity - (F32)max_render_cost) / (F32)max_render_cost, 0.f, 1.f);
F32 red_level = llmin((F32)complexity / (F32)max_render_cost, 1.f);
complexity_color.set(red_level, green_level, 0.f, 1.f);
}
}
// </FS:Ansariel>
// Rebuild name tag if state change detected
if (!mNameIsSet
@ -3269,10 +3273,11 @@ void LLVOAvatar::idleUpdateNameTagText(BOOL new_name)
}
// <FS:Ansariel> Show distance in tag
// <FS:Ansariel> Show Arc in nametag (for Jelly Dolls)
// <FS:TS> ...or everyone, if selected
// <FS:Ansariel> Show ARW in nametag options (for Jelly Dolls)
static const std::string complexity_label = LLTrans::getString("Nametag_Complexity_Label");
if (!isSelf() && (show_arw_always_tag || (show_too_complex_arw_tag && isTooComplex())))
if (show_arw_tag &&
((isSelf() && show_own_arw_tag) ||
(!isSelf() && (!show_too_complex_only_arw_tag || isTooComplex()))))
{
std::string complexity_string;
LLLocale locale(LLLocale::USER_LOCALE);

View File

@ -395,6 +395,26 @@ bool LLVivoxVoiceClient::writeString(const std::string &str)
return result;
}
// <FS:ND> On Linux the viewer can run SLVoice.exe through wine (https://www.winehq.org/)
// Vivox does not support Linux anymore and the SDK SLVoice for Linux uses is old and according to LL
// will stop working 'soon' (as of 2016-07-17). See also FIRE-19663
bool viewerUsesWineForVoice()
{
#ifndef LL_LINUX
return false;
#else
static LLCachedControl<bool> sEnableVoiceChat(gSavedSettings, "FSLinuxEnableWin32VoiceProxy" );
return sEnableVoiceChat;
#endif
}
bool viewerChoosesConnectionHandles()
{
return viewerUsesWineForVoice();
}
// </FS:ND>
/////////////////////////////
// session control messages
@ -425,13 +445,19 @@ void LLVivoxVoiceClient::connectorCreate()
loglevel = savedLogLevel;
// </FS:Ansariel>
}
// <FS:ND> Check if using the old SLVoice for Linux. the SDK in that version is too old to handle the extra args
std::string strConnectorHandle;
if( viewerChoosesConnectionHandles() )
strConnectorHandle = "<ConnectorHandle>" + LLVivoxSecurity::getInstance()->connectorHandle() + "</ConnectorHandle>";
// </FS:ND>
stream
<< "<Request requestId=\"" << mCommandCookie++ << "\" action=\"Connector.Create.1\">"
<< "<ClientName>V2 SDK</ClientName>"
<< "<AccountManagementServer>" << mVoiceAccountServerURI << "</AccountManagementServer>"
<< "<Mode>Normal</Mode>"
<< "<ConnectorHandle>" << LLVivoxSecurity::getInstance()->connectorHandle() << "</ConnectorHandle>"
<< strConnectorHandle
// <FS:Ansariel> Voice in multiple instances; by Latif Khalifa
<< (gSavedSettings.getBOOL("VoiceMultiInstance") ? "<MinimumPort>30000</MinimumPort><MaximumPort>50000</MaximumPort>" : "")
// </FS:Ansariel>
@ -649,7 +675,13 @@ bool LLVivoxVoiceClient::startAndLaunchDaemon()
#elif LL_DARWIN
exe_path += "../Resources/SLVoice";
#else
exe_path += "SLVoice";
// <FS:ND> On Linux the viewer can run SLVoice.exe through wine (https://www.winehq.org/)
// exe_path += "SLVoice";
if( !viewerUsesWineForVoice() )
exe_path += "SLVoice"; // native version
else
exe_path += "win32/SLVoice.exe"; // use bundled win32 version
// </FS:ND>
#endif
// See if the vivox executable exists
llstat s;
@ -657,8 +689,19 @@ bool LLVivoxVoiceClient::startAndLaunchDaemon()
{
// vivox executable exists. Build the command line and launch the daemon.
LLProcess::Params params;
// <FS:ND> On Linux the viewer can run SLVoice.exe through wine (https://www.winehq.org/)
params.executable = exe_path;
if( !viewerUsesWineForVoice() )
params.executable = exe_path;
else
{
params.executable = "wine";
params.args.add( exe_path );
}
//</FS:ND>
std::string loglevel = gSavedSettings.getString("VivoxDebugLevel");
std::string shutdown_timeout = gSavedSettings.getString("VivoxShutdownTimeout");
if (loglevel.empty())
@ -708,6 +751,8 @@ bool LLVivoxVoiceClient::startAndLaunchDaemon()
params.cwd = gDirUtilp->getAppRODataDir();
// <FS:ND> Check if using the old SLVoice for Linux. the SDK in that version is too old to handle the extra args
if( viewerChoosesConnectionHandles() ) { // </FS:ND>
# ifdef VIVOX_HANDLE_ARGS
params.args.add("-ah");
params.args.add(LLVivoxSecurity::getInstance()->accountHandle());
@ -715,6 +760,7 @@ bool LLVivoxVoiceClient::startAndLaunchDaemon()
params.args.add("-ch");
params.args.add(LLVivoxSecurity::getInstance()->connectorHandle());
# endif // VIVOX_HANDLE_ARGS
} // <FS:ND/>
sGatewayPtr = LLProcess::create(params);
@ -1878,12 +1924,18 @@ void LLVivoxVoiceClient::loginSendMessage()
bool autoPostCrashDumps = gSavedSettings.getBOOL("VivoxAutoPostCrashDumps");
// <FS:ND> Check if using the old SLVoice for Linux. the SDK in that version is too old to handle the extra args
std::string strAccountHandle;
if( viewerChoosesConnectionHandles() )
strAccountHandle = "<AccountHandle>" + LLVivoxSecurity::getInstance()->accountHandle() + "</AccountHandle>";
// </FS:ND>
stream
<< "<Request requestId=\"" << mCommandCookie++ << "\" action=\"Account.Login.1\">"
<< "<ConnectorHandle>" << LLVivoxSecurity::getInstance()->connectorHandle() << "</ConnectorHandle>"
<< "<AccountName>" << mAccountName << "</AccountName>"
<< "<AccountPassword>" << mAccountPassword << "</AccountPassword>"
<< "<AccountHandle>" << LLVivoxSecurity::getInstance()->accountHandle() << "</AccountHandle>"
<< strAccountHandle
<< "<AudioSessionAnswerMode>VerifyAnswer</AudioSessionAnswerMode>"
<< "<EnableBuddiesAndPresence>false</EnableBuddiesAndPresence>"
<< "<EnablePresencePersistence>0</EnablePresencePersistence>"
@ -2904,6 +2956,8 @@ void LLVivoxVoiceClient::connectorCreateResponse(int statusCode, std::string &st
else
{
// Connector created, move forward.
// <FS:ND> Check if using the old SLVoice for Linux. the SDK in that version is too old to handle the extra args
if( viewerChoosesConnectionHandles() ) { // </FS:ND>
if (connectorHandle == LLVivoxSecurity::getInstance()->connectorHandle())
{
LL_INFOS("Voice") << "Connector.Create succeeded, Vivox SDK version is " << versionID << " connector handle " << connectorHandle << LL_ENDL;
@ -2921,6 +2975,15 @@ void LLVivoxVoiceClient::connectorCreateResponse(int statusCode, std::string &st
<< LL_ENDL;
result["connector"] = LLSD::Boolean(false);
}
} else { // <FS:ND/> For old Linux Voice
LL_INFOS("Voice") << "Connector.Create succeeded, Vivox SDK version is " << versionID << LL_ENDL;
mVoiceVersion.serverVersion = versionID;
LLVivoxSecurity::getInstance()->setConnectorHandle(connectorHandle);
mConnectorEstablished = true;
mTerminateDaemon = false;
result["connector"] = LLSD::Boolean(true);
} // <FS:ND/> For old Linux voice
}
LLEventPumps::instance().post("vivoxClientPump", result);
@ -2948,6 +3011,11 @@ void LLVivoxVoiceClient::loginResponse(int statusCode, std::string &statusString
else
{
// Login succeeded, move forward.
// <FS:ND> Check if using the old SLVoice for Linux.
if( !viewerChoosesConnectionHandles() )
LLVivoxSecurity::getInstance()->setAccountHandle(accountHandle);
// </FS:ND>
mAccountLoggedIn = true;
mNumberOfAliases = numberOfAliases;
result["login"] = LLSD::String("response_ok");

View File

@ -1050,6 +1050,11 @@ class LLVivoxSecurity : public LLSingleton<LLVivoxSecurity>
std::string connectorHandle() { return mConnectorHandle; };
std::string accountHandle() { return mAccountHandle; };
// <FS:ND> For the old Vivox SDK used on Linux
void setConnectorHandle(const std::string& handle) { mConnectorHandle = handle; }
void setAccountHandle(const std::string& handle) { mAccountHandle = handle; }
// </FS:ND>
private:
std::string mConnectorHandle;
std::string mAccountHandle;

View File

@ -213,9 +213,14 @@ bool RlvActions::canShowName(EShowNamesContext eContext, const LLUUID& idAgent)
return false;
}
bool RlvActions::canShowNearbyAgents()
{
return !gRlvHandler.hasBehaviour(RLV_BHVR_SHOWNEARBY);
}
// ============================================================================
// Movement
//
//
bool RlvActions::canAcceptTpOffer(const LLUUID& idSender)
{

View File

@ -113,6 +113,11 @@ public:
static bool canShowName(EShowNamesContext eContext, const LLUUID& idAgent = LLUUID::null);
static void setShowName(EShowNamesContext eContext, bool fCanShowName) { if ( (eContext < SNC_COUNT) && (isRlvEnabled()) ) { s_BlockNamesContexts[eContext] = !fCanShowName; } }
/*
* Returns true if the user is allowed to see the presence of nearby avatars in UI elements (anonymized or otherwise)
*/
static bool canShowNearbyAgents();
protected:
// Backwards logic so that we can initialize to 0 and it won't block when we forget to/don't check if RLVa is disabled
static bool s_BlockNamesContexts[SNC_COUNT];

View File

@ -458,20 +458,21 @@ void RlvUtil::filterLocation(std::string& strUTF8Text)
}
// Checked: 2010-12-08 (RLVa-1.2.2c) | Modified: RLVa-1.2.2c
void RlvUtil::filterNames(std::string& strUTF8Text, bool fFilterLegacy)
void RlvUtil::filterNames(std::string& strUTF8Text, bool fFilterLegacy, bool fClearMatches)
{
uuid_vec_t idAgents;
LLWorld::getInstance()->getAvatars(&idAgents, NULL);
for (int idxAgent = 0, cntAgent = idAgents.size(); idxAgent < cntAgent; idxAgent++)
{
LLAvatarName avName;
if ( (LLAvatarNameCache::get(idAgents[idxAgent], &avName)) && (!RlvActions::canShowName(RlvActions::SNC_DEFAULT, idAgents[idxAgent])) )
// NOTE: if we're agressively culling nearby names then ignore exceptions
if ( (LLAvatarNameCache::get(idAgents[idxAgent], &avName)) && ((fClearMatches) || (!RlvActions::canShowName(RlvActions::SNC_DEFAULT, idAgents[idxAgent]))) )
{
const std::string& strDisplayName = escape_for_regex(avName.getDisplayName());
bool fFilterDisplay = (strDisplayName.length() > 2);
const std::string& strLegacyName = avName.getLegacyName();
fFilterLegacy &= (strLegacyName.length() > 2);
const std::string& strAnonym = RlvStrings::getAnonym(avName);
const std::string& strAnonym = (!fClearMatches) ? RlvStrings::getAnonym(avName) : LLStringUtil::null;
// If the display name is a subset of the legacy name we need to filter that first, otherwise it's the other way around
if (boost::icontains(strLegacyName, strDisplayName))

View File

@ -170,7 +170,7 @@ public:
static bool isNearbyRegion(const std::string& strRegion); // @showloc
static void filterLocation(std::string& strUTF8Text); // @showloc
static void filterNames(std::string& strUTF8Text, bool fFilterLegacy = true); // @shownames
static void filterNames(std::string& strUTF8Text, bool fFilterLegacy = true, bool fClearMatches = false); // @shownames
static void filterScriptQuestions(S32& nQuestions, LLSD& sdPayload);
static bool isForceTp() { return m_fForceTp; }

View File

@ -128,6 +128,7 @@ enum ERlvBehaviour {
RLV_BHVR_SHOWLOC, // "showloc"
RLV_BHVR_SHOWNAMES, // "shownames"
RLV_BHVR_SHOWNAMETAGS, // "shownametags"
RLV_BHVR_SHOWNEARBY,
RLV_BHVR_SHOWHOVERTEXT, // "showhovertext"
RLV_BHVR_SHOWHOVERTEXTHUD, // "showhovertexthud"
RLV_BHVR_SHOWHOVERTEXTWORLD, // "showhovertextworld"
@ -307,9 +308,10 @@ enum ERlvExceptionCheck
enum ERlvLockMask
{
RLV_LOCK_ADD = 0x01,
RLV_LOCK_REMOVE = 0x02,
RLV_LOCK_ANY = RLV_LOCK_ADD | RLV_LOCK_REMOVE
RLV_LOCK_NONE = 0x00,
RLV_LOCK_ADD = 0x01,
RLV_LOCK_REMOVE = 0x02,
RLV_LOCK_ANY = RLV_LOCK_ADD | RLV_LOCK_REMOVE
};
enum ERlvWearMask

View File

@ -2089,14 +2089,27 @@ ERlvCmdRet RlvBehaviourHandler<RLV_BHVR_SHOWNAMES>::onCommand(const RlvCommand&
const LLUUID idAgent = RlvCommandOptionHelper::parseOption<LLUUID>(rlvCmd.getOption());
// Refresh the nearby people list (if necessary)
LLPanelPeople* pPeoplePanel = LLFloaterSidePanelContainer::getPanel<LLPanelPeople>("people", "panel_people");
RLV_ASSERT( (pPeoplePanel) && (pPeoplePanel->getNearbyList()) );
if ( (pPeoplePanel) && (pPeoplePanel->getNearbyList()) && (pPeoplePanel->getNearbyList()->contains(idAgent)) )
{
if (pPeoplePanel->getNearbyList()->isInVisibleChain())
pPeoplePanel->onCommit();
pPeoplePanel->getNearbyList()->updateAvatarNames();
}
// <FS:Ansariel> [Standalone radar]
//LLPanelPeople* pPeoplePanel = LLFloaterSidePanelContainer::getPanel<LLPanelPeople>("people", "panel_people");
//RLV_ASSERT( (pPeoplePanel) && (pPeoplePanel->getNearbyList()) );
//if ( (pPeoplePanel) && (pPeoplePanel->getNearbyList()) && (pPeoplePanel->getNearbyList()->contains(idAgent)) )
//{
// if (pPeoplePanel->getNearbyList()->isInVisibleChain())
// pPeoplePanel->onCommit();
// pPeoplePanel->getNearbyList()->updateAvatarNames();
//}
FSRadar* pRadar = FSRadar::getInstance();
RLV_ASSERT( (pRadar) );
if ( (pRadar) )
pRadar->updateNames();
// </FS:Ansariel> [Standalone radar]
// Refresh the speaker list
// <FS:Ansariel> [FS communication UI]
FSFloaterVoiceControls* pCallFloater = LLFloaterReg::findTypedInstance<FSFloaterVoiceControls>("fs_voice_controls");
if (pCallFloater)
pCallFloater->getAvatarCallerList()->updateAvatarNames();
// </FS:Ansariel> [FS communication UI]
// Refresh that avatar's name tag and all HUD text
LLVOAvatar::invalidateNameTag(idAgent);
@ -2129,6 +2142,47 @@ ERlvCmdRet RlvBehaviourHandler<RLV_BHVR_SHOWNAMETAGS>::onCommand(const RlvComman
return eRet;
}
// Handles: @shownearby=n|y toggles
template<> template<>
void RlvBehaviourToggleHandler<RLV_BHVR_SHOWNEARBY>::onCommandToggle(ERlvBehaviour eBhvr, bool fHasBhvr)
{
if (LLApp::isQuitting())
return; // Nothing to do if the viewer is shutting down
// Refresh the nearby people list
// <FS:Ansariel> [Standalone radar]
// -> This is handled in FSRadar (filtering all items) and
// FSPanelRadar (setting the blocked message). Since the radar
// is updated once every second, we do not hassle to explicitly
// clear it here, since it will happening almost instantly anyway
//LLPanelPeople* pPeoplePanel = LLFloaterSidePanelContainer::getPanel<LLPanelPeople>("people", "panel_people");
//LLAvatarList* pNearbyList = (pPeoplePanel) ? pPeoplePanel->getNearbyList() : NULL;
//RLV_ASSERT( (pPeoplePanel) && (pNearbyList) );
//if (pNearbyList)
//{
// static std::string s_strNoItemsMsg = pNearbyList->getNoItemsMsg();
// pNearbyList->setNoItemsMsg( (fHasBhvr) ? RlvStrings::getString("blocked_nearby") : s_strNoItemsMsg );
// pNearbyList->clear();
// if (pNearbyList->isInVisibleChain())
// pPeoplePanel->onCommit();
// if (!fHasBhvr)
// pPeoplePanel->updateNearbyList();
//}
// </FS:Ansariel> [Standalone radar]
// <FS:Ansariel> [FS communication UI]
FSFloaterVoiceControls* pCallFloater = LLFloaterReg::findTypedInstance<FSFloaterVoiceControls>("fs_voice_controls");
if (pCallFloater)
{
pCallFloater->toggleRlvShowNearbyRestriction(fHasBhvr);
}
// </FS:Ansariel> [FS communication UI]
// Refresh that avatar's name tag and all HUD text
LLHUDText::refreshAllObjectText();
}
// Handles: @showself=n|y and @showselfhead=n|y toggles
template<> template<>
void RlvBehaviourShowSelfToggleHandler::onCommandToggle(ERlvBehaviour eBvhr, bool fHasBhvr)

View File

@ -123,7 +123,7 @@ RlvBehaviourDictionary::RlvBehaviourDictionary()
addEntry(new RlvBehaviourInfo("remoutfit", RLV_BHVR_REMOUTFIT, RLV_TYPE_ADDREM));
addEntry(new RlvBehaviourGenericProcessor<RLV_OPTION_NONE>("rez", RLV_BHVR_REZ));
addEntry(new RlvBehaviourProcessor<RLV_BHVR_SENDCHANNEL, RlvBehaviourSendChannelHandler>("sendchannel", RlvBehaviourInfo::BHVR_STRICT));
addEntry(new RlvBehaviourProcessor<RLV_BHVR_SENDCHANNELEXCEPT, RlvBehaviourSendChannelHandler>("sendchannel_except", RlvBehaviourInfo::BHVR_STRICT));
addEntry(new RlvBehaviourProcessor<RLV_BHVR_SENDCHANNELEXCEPT, RlvBehaviourSendChannelHandler>("sendchannel_except", RlvBehaviourInfo::BHVR_STRICT | RlvBehaviourInfo::BHVR_EXPERIMENTAL));
addEntry(new RlvBehaviourGenericProcessor<RLV_OPTION_NONE>("sendchat", RLV_BHVR_SENDCHAT));
addEntry(new RlvBehaviourToggleProcessor<RLV_BHVR_SENDIM, RlvBehaviourRecvSendStartIMHandler>("sendim", RlvBehaviourInfo::BHVR_STRICT));
addModifier(RLV_BHVR_SENDIM, RLV_MODIFIER_SENDIMDISTMIN, new RlvBehaviourModifier("SendIM Distance (Min)", F32_MAX, true, new RlvBehaviourModifier_CompMax));
@ -144,8 +144,9 @@ RlvBehaviourDictionary::RlvBehaviourDictionary()
addEntry(new RlvBehaviourGenericProcessor<RLV_OPTION_NONE>("showminimap", RLV_BHVR_SHOWMINIMAP));
addEntry(new RlvBehaviourToggleProcessor<RLV_BHVR_SHOWNAMES>("shownames", RlvBehaviourInfo::BHVR_STRICT));
addEntry(new RlvBehaviourToggleProcessor<RLV_BHVR_SHOWNAMETAGS>("shownametags", RlvBehaviourInfo::BHVR_STRICT ));
addEntry(new RlvBehaviourGenericToggleProcessor<RLV_BHVR_SHOWSELF, RLV_OPTION_NONE, RlvBehaviourShowSelfToggleHandler>("showself", RlvBehaviourInfo::BHVR_EXTENDED));
addEntry(new RlvBehaviourGenericToggleProcessor<RLV_BHVR_SHOWSELFHEAD, RLV_OPTION_NONE, RlvBehaviourShowSelfToggleHandler>("showselfhead", RlvBehaviourInfo::BHVR_EXTENDED));
addEntry(new RlvBehaviourGenericToggleProcessor<RLV_BHVR_SHOWNEARBY, RLV_OPTION_NONE>("shownearby", RlvBehaviourInfo::BHVR_EXPERIMENTAL));
addEntry(new RlvBehaviourGenericToggleProcessor<RLV_BHVR_SHOWSELF, RLV_OPTION_NONE, RlvBehaviourShowSelfToggleHandler>("showself", RlvBehaviourInfo::BHVR_EXPERIMENTAL));
addEntry(new RlvBehaviourGenericToggleProcessor<RLV_BHVR_SHOWSELFHEAD, RLV_OPTION_NONE, RlvBehaviourShowSelfToggleHandler>("showselfhead", RlvBehaviourInfo::BHVR_EXPERIMENTAL));
addEntry(new RlvBehaviourGenericProcessor<RLV_OPTION_NONE>("showworldmap", RLV_BHVR_SHOWWORLDMAP));
addEntry(new RlvBehaviourGenericProcessor<RLV_OPTION_NONE>("sit", RLV_BHVR_SIT));
addEntry(new RlvBehaviourGenericProcessor<RLV_OPTION_NONE_OR_MODIFIER>("sittp", RLV_BHVR_SITTP));
@ -167,7 +168,7 @@ RlvBehaviourDictionary::RlvBehaviourDictionary()
addEntry(new RlvBehaviourGenericProcessor<RLV_OPTION_NONE_OR_EXCEPTION>("touchworld", RLV_BHVR_TOUCHWORLD));
addEntry(new RlvBehaviourGenericProcessor<RLV_OPTION_NONE>("tplm", RLV_BHVR_TPLM));
addEntry(new RlvBehaviourGenericProcessor<RLV_OPTION_NONE>("tploc", RLV_BHVR_TPLOC));
addEntry(new RlvBehaviourGenericProcessor<RLV_OPTION_NONE_OR_MODIFIER>("tplocal", RLV_BHVR_TPLOCAL));
addEntry(new RlvBehaviourGenericProcessor<RLV_OPTION_NONE_OR_MODIFIER>("tplocal", RLV_BHVR_TPLOCAL, RlvBehaviourInfo::BHVR_EXPERIMENTAL));
addModifier(RLV_BHVR_TPLOCAL, RLV_MODIFIER_TPLOCALDIST, new RlvBehaviourModifier("Local Teleport Distance", RLV_MODIFIER_TPLOCAL_DEFAULT, true, new RlvBehaviourModifier_CompMin));
addEntry(new RlvBehaviourGenericProcessor<RLV_OPTION_NONE_OR_EXCEPTION>("tplure", RLV_BHVR_TPLURE, RlvBehaviourInfo::BHVR_STRICT));
addEntry(new RlvBehaviourGenericProcessor<RLV_OPTION_NONE_OR_EXCEPTION>("tprequest", RLV_BHVR_TPREQUEST, RlvBehaviourInfo::BHVR_STRICT | RlvBehaviourInfo::BHVR_EXTENDED));
@ -179,13 +180,13 @@ RlvBehaviourDictionary::RlvBehaviourDictionary()
addEntry(new RlvBehaviourGenericProcessor<RLV_OPTION_NONE>("viewtexture", RLV_BHVR_VIEWTEXTURE));
// Camera
addEntry(new RlvBehaviourGenericToggleProcessor<RLV_BHVR_SETCAM, RLV_OPTION_NONE>("setcam"));
addEntry(new RlvBehaviourGenericProcessor<RLV_OPTION_MODIFIER>("setcam_avdistmin", RLV_BHVR_SETCAM_AVDISTMIN));
addEntry(new RlvBehaviourGenericProcessor<RLV_OPTION_MODIFIER>("setcam_avdistmin", RLV_BHVR_SETCAM_AVDISTMIN, RlvBehaviourInfo::BHVR_EXPERIMENTAL));
addModifier(RLV_BHVR_SETCAM_AVDISTMIN, RLV_MODIFIER_SETCAM_AVDISTMIN, new RlvBehaviourModifierHandler<RLV_MODIFIER_SETCAM_AVDISTMIN>("Camera - Avatar Distance (Min)", 0.0f, false, new RlvBehaviourModifier_CompMax()));
addEntry(new RlvBehaviourGenericProcessor<RLV_OPTION_MODIFIER>("setcam_avdistmax", RLV_BHVR_SETCAM_AVDISTMAX));
addEntry(new RlvBehaviourGenericProcessor<RLV_OPTION_MODIFIER>("setcam_avdistmax", RLV_BHVR_SETCAM_AVDISTMAX, RlvBehaviourInfo::BHVR_EXPERIMENTAL));
addModifier(RLV_BHVR_SETCAM_AVDISTMAX, RLV_MODIFIER_SETCAM_AVDISTMAX, new RlvBehaviourModifier("Camera - Avatar Distance (Max)", F32_MAX, false, new RlvBehaviourModifier_CompMin));
addEntry(new RlvBehaviourGenericProcessor<RLV_OPTION_MODIFIER>("setcam_origindistmin", RLV_BHVR_SETCAM_ORIGINDISTMIN));
addEntry(new RlvBehaviourGenericProcessor<RLV_OPTION_MODIFIER>("setcam_origindistmin", RLV_BHVR_SETCAM_ORIGINDISTMIN, RlvBehaviourInfo::BHVR_EXPERIMENTAL));
addModifier(RLV_BHVR_SETCAM_ORIGINDISTMIN, RLV_MODIFIER_SETCAM_ORIGINDISTMIN, new RlvBehaviourModifier("Camera - Focus Distance (Min)", 0.0f, true, new RlvBehaviourModifier_CompMax));
addEntry(new RlvBehaviourGenericProcessor<RLV_OPTION_MODIFIER>("setcam_origindistmax", RLV_BHVR_SETCAM_ORIGINDISTMAX));
addEntry(new RlvBehaviourGenericProcessor<RLV_OPTION_MODIFIER>("setcam_origindistmax", RLV_BHVR_SETCAM_ORIGINDISTMAX, RlvBehaviourInfo::BHVR_EXPERIMENTAL));
addModifier(RLV_BHVR_SETCAM_ORIGINDISTMAX, RLV_MODIFIER_SETCAM_ORIGINDISTMAX, new RlvBehaviourModifier("Camera - Focus Distance (Max)", F32_MAX, true, new RlvBehaviourModifier_CompMin));
addEntry(new RlvBehaviourGenericToggleProcessor<RLV_BHVR_SETCAM_EYEOFFSET, RLV_OPTION_MODIFIER, RlvBehaviourCamEyeFocusOffsetHandler>("setcam_eyeoffset", RlvBehaviourInfo::BHVR_EXPERIMENTAL));
addModifier(RLV_BHVR_SETCAM_EYEOFFSET, RLV_MODIFIER_SETCAM_EYEOFFSET, new RlvBehaviourModifierHandler<RLV_MODIFIER_SETCAM_EYEOFFSET>("Camera - Eye Offset", LLVector3::zero, true, nullptr));

View File

@ -949,7 +949,7 @@ protected:
// Checked: 2011-03-28 (RLVa-1.3.0g) | Modified: RLVa-1.3.0g
RlvFolderLocks::RlvFolderLocks()
: m_fLookupDirty(false), m_fLockedRoot(false), m_cntLockAdd(0), m_cntLockRem(0)
: m_fLookupDirty(false), m_RootLockType(RLV_LOCK_NONE), m_cntLockAdd(0), m_cntLockRem(0)
{
LLOutfitObserver::instance().addCOFChangedCallback(boost::bind(&RlvFolderLocks::onNeedsLookupRefresh, this));
RlvInventory::instance().addSharedRootIDChangedCallback(boost::bind(&RlvFolderLocks::onNeedsLookupRefresh, this));
@ -1201,7 +1201,7 @@ bool RlvFolderLocks::isLockedFolder(LLUUID idFolder, ERlvLockMask eLockTypeMask,
idFolderCur = (pParent) ? pParent->getParentUUID() : idFolderRoot;
}
// If we didn't encounter an explicit deny lock with no exception then the folder is locked if the entire inventory is locked down
return (m_fLockedRoot) && (eSourceTypeMask & ST_ROOTFOLDER) && (idsRlvObjRem.empty()) && (idsRlvObjAdd.empty());
return (m_RootLockType & eLockTypeMask) && (eSourceTypeMask & ST_ROOTFOLDER) && (idsRlvObjRem.empty()) && (idsRlvObjAdd.empty());
}
// Checked: 2010-11-30 (RLVa-1.3.0b) | Added: RLVa-1.3.0b
@ -1217,7 +1217,7 @@ void RlvFolderLocks::refreshLockedLookups() const
//
// Refresh locked folders
//
m_fLockedRoot = false;
m_RootLockType = RLV_LOCK_NONE;
m_LockedFolderMap.clear();
for (folderlock_list_t::const_iterator itFolderLock = m_FolderLocks.begin(); itFolderLock != m_FolderLocks.end(); ++itFolderLock)
{
@ -1231,8 +1231,8 @@ void RlvFolderLocks::refreshLockedLookups() const
const LLViewerInventoryCategory* pFolder = lockedFolders.at(idxFolder);
if (idFolderRoot != pFolder->getUUID())
m_LockedFolderMap.insert(std::pair<LLUUID, const folderlock_descr_t*>(pFolder->getUUID(), pLockDescr));
else
m_fLockedRoot |= (SCOPE_SUBTREE == pLockDescr->eLockScope);
else if (SCOPE_SUBTREE == pLockDescr->eLockScope)
m_RootLockType |= (U32)pLockDescr->eLockType;
}
}
}

View File

@ -376,11 +376,11 @@ protected:
// Cached item look-up variables
typedef std::multimap<LLUUID, const folderlock_descr_t*> folderlock_map_t;
mutable bool m_fLookupDirty;
mutable bool m_fLockedRoot;
mutable uuid_vec_t m_LockedAttachmentRem;
mutable folderlock_map_t m_LockedFolderMap;
mutable uuid_vec_t m_LockedWearableRem;
mutable bool m_fLookupDirty;
mutable U32 m_RootLockType;
mutable uuid_vec_t m_LockedAttachmentRem;
mutable folderlock_map_t m_LockedFolderMap;
mutable uuid_vec_t m_LockedWearableRem;
private:
friend class LLSingleton<RlvFolderLocks>;
};

View File

@ -63,8 +63,9 @@
<check_box label="Im alten Namensformat „Resident“ abschneiden" name="legacy_trim_check" tool_tip="Schneidet den Nachnamen „Resident“ im alten Namensformat ab." />
<check_box label="Alte Position für Avatarnamen" name="FSLegacyNametagPosition" tool_tip="Falls aktiviert, wird die Position des Avatarnamens fest an der Position des Avatars angezeigt und folgt nicht der Bewegung des Kopfes bei Animationen." />
<check_box label="„Automatische Antwort“-Modus anzeigen" name="FSShowAutorespondInNameTag" tool_tip="Falls aktiviert, wird der Modus „Automatische Antwort“ im eigenen Avatarnamen angezeigt."/>
<check_box label="Komplexität falls zu komplex" name="FSTagShowTooComplexARW" tool_tip="Falls aktiviert, wird die aktuelle Avatar-Komplexität angezeigt, wenn der Avatar zu komplex ist und als Jelly Doll dargestellt wird."/>
<check_box label="Komplexität immer anzeigen" name="FSTagAlwaysShowARW" tool_tip="Falls aktiviert, wird immer die aktuelle Avatar-Komplexität angezeigt."/>
<check_box label="Komplexität anzeigen" name="FSTagShowARW" tool_tip="Falls aktiviert, wird die aktuelle Avatar-Komplexität angezeigt."/>
<check_box label="Nur falls zu komplex" name="FSTagShowTooComplexOnlyARW" tool_tip="Falls aktiviert, wird die aktuelle Avatar-Komplexität nur angezeigt, wenn der Avatar zu komplex ist und als Jelly Doll dargestellt wird."/>
<check_box label="Eigene Komplexität anzeigen" name="FSTagShowOwnARW" tool_tip="Falls aktiviert, wird die eigene aktuelle Avatar-Komplexität angezeigt."/>
<check_box label="Viewer-UI-Tipps aktivieren" name="viewer_hints_check"/>
<text name="title_afk_text" width="275">

View File

@ -61,6 +61,11 @@
<key>value</key>
<string>Die aktive Gruppe kann aufgrund von RLV-Einschränkungen nicht geändert werden. Setze zurück auf „[GROUP_SLURL]“.</string>
</map>
<key>blocked_nearby</key>
<map>
<key>value</key>
<string>Avatare in der Nähe können aufgrund von RLV-Einschränkungen nicht angezeigt werden.</string>
</map>
<key>blocked_permattach</key>
<map>
<key>value</key>

View File

@ -152,6 +152,16 @@
name="non_avatar_caller"
top="10"
width="276" />
<text
follows="all"
font="SansSerif"
height="120"
layout="topleft"
left="0"
name="rlv_restricted"
top="10"
width="280"
wrap="true"/>
</layout_panel>
</layout_stack>
</floater>

View File

@ -30,7 +30,6 @@
</text>
<panel_inventory_object
background_visible="false"
draw_border="false"
follows="all"
height="250"
layout="topleft"

View File

@ -44,6 +44,8 @@ Maximum 200 per group daily
height="125"
column_padding="0"
draw_heading="true"
sort_column="4"
sort_ascending="false"
follows="left|top|right"
layout="topleft">
<scroll_list.columns
@ -61,6 +63,7 @@ Maximum 200 per group daily
<scroll_list.columns
label="Date"
name="date"
sort_column="sort"
relative_width="0.35" />
<scroll_list.columns
name="sort"

View File

@ -436,29 +436,36 @@
top_delta="0"/>
<check_box
control_name="FSTagShowTooComplexARW"
control_name="FSTagShowARW"
enabled_control="AvatarNameTagMode"
height="16"
label="Complexity if too complex"
label="Show avatar complexity"
layout="topleft"
left="30"
width="140"
top_pad="3"
name="FSTagShowTooComplexARW"
tool_tip="If enabled, the nametag will show the current avatar complexity if the avatar is too complex and shown as a jelly doll."
top_delta="0" />
name="FSTagShowARW"
tool_tip="If enabled, the nametag will show the current avatar complexity."/>
<check_box
control_name="FSTagAlwaysShowARW"
enabled_control="AvatarNameTagMode"
control_name="FSTagShowTooComplexOnlyARW"
height="16"
label="Always show complexity"
label="Only if too complex"
layout="topleft"
left_pad="50"
width="100"
name="FSTagAlwaysShowARW"
tool_tip="If enabled, the nametag will always show the current avatar complexity."
top_delta="0" />
left="40"
width="140"
top_pad="3"
name="FSTagShowTooComplexOnlyARW"
tool_tip="If enabled, the nametag will show the current avatar complexity only if the avatar is too complex and shown as a jelly doll."/>
<check_box
control_name="FSTagShowOwnARW"
height="16"
label="Show own complexity"
layout="topleft"
left="40"
width="140"
top_pad="3"
name="FSTagShowOwnARW"
tool_tip="If enabled, your own nametag will your current avatar complexity."/>
<!--away/logout-->
<text
@ -468,7 +475,7 @@
height="13"
layout="topleft"
left="30"
top_pad="15"
top_pad="10"
name="title_afk_text"
width="260">
Away timeout:
@ -576,7 +583,7 @@
left="30"
mouse_opaque="false"
name="text_box3"
top_pad="25"
top_pad="10"
width="500">
Unavailable and Autoresponse messages can be found under Privacy / Autoresponse
</text>

View File

@ -61,6 +61,11 @@
<key>value</key>
<string>Unable to change your active group due to an RLV restriction; switching back to [GROUP_SLURL]</string>
</map>
<key>blocked_nearby</key>
<map>
<key>value</key>
<string>Unable to see the presence of nearby avatars due to RLV restrictions</string>
</map>
<key>blocked_permattach</key>
<map>
<key>value</key>

View File

@ -61,8 +61,9 @@
<check_box label="Usuwaj 'Resident' z imion starego typu" name="legacy_trim_check" tool_tip="Usuwaj 'Resident' z imion starego typu."/>
<check_box label="Pozycje imion w stary sposób" name="FSLegacyNametagPosition" tool_tip="Gdy włączysz tą opcję, to tag imienia będzie zawieszony na stałej wysokości ponad awatarem i nie będzie podążać za jego głową, jeśli poruszy się ona np. w wyniku animacji."/>
<check_box label="Pokaż tryb autoodpowiedzi w moim tagu imienia" name="FSShowAutorespondInNameTag" tool_tip="Status będzie widoczny, gdy włączysz autoodpowiedź."/>
<check_box label="Złożoność, gdy jest zbyt duża" name="FSTagShowTooComplexARW" tool_tip="Gdy włączysz tą opcję, to tag imienia będzie pokazywać złożoność graficzną awatara, jeśli będzie on zbyt złożony i pokazywany jako mniej obciążająca komputer forma (tzw. Jelly Doll)"/>
<check_box label="Zawsze pokazuj złożoność" name="FSTagAlwaysShowARW" tool_tip="Gdy włączysz tą opcję, to tag imienia będzie zawsze pokazywać złożoność graficzną awatara."/>
<check_box label="Pokazuj złożoność" name="FSTagShowARW" tool_tip="Gdy włączysz tą opcję, to tag imienia będzie pokazywać obecną złożoność graficzną awatara."/>
<check_box label="Tylko gdy jest zbyt duża" name="FSTagShowTooComplexOnlyARW" tool_tip="Gdy włączysz tą opcję, to tag imienia będzie pokazywać złożoność graficzną awatara tylko wtedy, gdy będzie on zbyt złożony i zastępowany przez mniej obciążającą komputer formę (tzw. Jelly Doll)."/>
<check_box label="Pokazuj własną złożoność" name="FSTagShowOwnARW" tool_tip="Gdy włączysz tą opcję, to tag imienia będzie pokazywać Twoją własną, obecną złożoność graficzną."/>
<text name="title_afk_text">
Zasypiaj po czasie:
</text>

View File

@ -55,6 +55,11 @@
<key>value</key>
<string>Nie można zmienić aktywnej grupy ze względu na ograniczenia RLV; Zmieniam z powrotem na [GROUP_SLURL]</string>
</map>
<key>blocked_nearby</key>
<map>
<key>value</key>
<string>Nie można widzieć osób w pobliżu ze względu na ograniczenia RLV</string>
</map>
<key>blocked_permattach</key>
<map>
<key>value</key>

View File

@ -43,6 +43,8 @@ Maximum 200 per group daily
left="0"
right="-1"
name="notice_list"
sort_ascending="false"
sort_column="4"
top_pad="0"
width="304">
<scroll_list.columns
@ -60,6 +62,7 @@ Maximum 200 per group daily
<scroll_list.columns
label="Date"
name="date"
sort_column="sort"
relative_width="0.35" />
<scroll_list.columns
name="sort"

View File

@ -43,6 +43,8 @@ Maximum 200 per group daily
left="0"
right="-1"
name="notice_list"
sort_ascending="false"
sort_column="4"
top_pad="0"
width="304">
<scroll_list.columns
@ -60,6 +62,7 @@ Maximum 200 per group daily
<scroll_list.columns
label="Date"
name="date"
sort_column="sort"
relative_width="0.35" />
<scroll_list.columns
name="sort"

View File

@ -114,6 +114,16 @@
name="non_avatar_caller"
top="10"
width="276" />
<text
follows="all"
font="SansSerif"
height="120"
layout="topleft"
left="0"
name="rlv_restricted"
top="10"
width="280"
wrap="true"/>
</layout_panel>
</layout_stack>
<slider

View File

@ -1497,6 +1497,7 @@ class LinuxManifest(ViewerManifest):
# Currentelly, the 32-bit ones will work with a 64-bit client.
if self.prefix(src="../packages/lib/release", dst="bin"):
self.path("SLVoice")
self.path("win32")
self.end_prefix()
if self.prefix(src="../packages/lib/release", dst="lib"):
self.path("libortp.so")
@ -1562,7 +1563,7 @@ class LinuxManifest(ViewerManifest):
def strip_binaries(self):
if self.args['buildtype'].lower() == 'release' and self.is_packaging_viewer():
print "* Going strip-crazy on the packaged binaries, since this is a RELEASE build"
self.run_command(r"find %(d)r/bin %(d)r/lib -type f \! -name update_install \! -name *.pak \! -name *.dat \! -name *.bin \! -name core | xargs --no-run-if-empty strip -S" % {'d': self.get_dst_prefix()} ) # makes some small assumptions about our packaged dir structure
self.run_command(r"find %(d)r/bin %(d)r/lib -type f \! -name update_install \! -name *.pak \! -name *.dat \! -name *.bin \! -name core \! -path '*win32*' | xargs --no-run-if-empty strip -S" % {'d': self.get_dst_prefix()} ) # makes some small assumptions about our packaged dir structure
class Linux_i686_Manifest(LinuxManifest):
def construct(self):