Commits

Anonymous committed 19cf781 Merge

Merge with latest lindenlab/viewer-development

Comments (0)

Files changed (39)

File contents unchanged.
 viewer-vs2010.build_viewer_update_version_manager = false
 viewer-vs2010.build_link_parallel = false
 
+# ========================================
+# Simon says
+# ========================================
+simon_viewer-dev-private.public_build = false
+
+
 # eof

indra/llinventory/llparcel.cpp

 
 	setPreviousOwnerID(LLUUID::null);
 	setPreviouslyGroupOwned(FALSE);
+
+	setHiddenAVs(false);
+	setHaveHiddenAVsData(false);
 }
 
 void LLParcel::overrideOwner(const LLUUID& owner_id, BOOL is_group_owned)
 	msg["user_location"] = ll_sd_from_vector3(mUserLocation);
 	msg["user_look_at"] = ll_sd_from_vector3(mUserLookAt);
 	msg["landing_type"] = (U8)mLandingType;
-
+	msg["hidden_avs"] = (LLSD::Boolean) getHiddenAVs();
 }
 
 
     msg->getStringFast( _PREHASH_ParcelData,_PREHASH_MediaURL, buffer );
     setMediaURL(buffer);
     
+	BOOL hidden_avs = FALSE;
+	bool have_hidden_av_data = (msg->getSizeFast(_PREHASH_ParcelData, _PREHASH_HiddenAVs) > 0);
+	if (have_hidden_av_data)
+	{
+		msg->getBOOLFast(_PREHASH_ParcelData, _PREHASH_HiddenAVs, hidden_avs);
+	}
+	setHiddenAVs((bool) hidden_avs);
+	setHaveHiddenAVsData(have_hidden_av_data);
+
     // non-optimized version
     msg->getU8 ( "ParcelData", "MediaAutoScale", mMediaAutoScale );
     

indra/llinventory/llparcel.h

 // unused 0x06
 // unused 0x07
 // flag, unused 0x08
-// flag, unused 0x10
+const U8 PARCEL_HIDDENAVS   = 0x10;	// avatars not visible outside of parcel
 const U8 PARCEL_SOUND_LOCAL = 0x20;
 const U8 PARCEL_WEST_LINE	= 0x40;	// flag, property line on west edge
 const U8 PARCEL_SOUTH_LINE	= 0x80;	// flag, property line on south edge
 class LLAccessEntry
 {
 public:
+	LLAccessEntry()
+	:	mID(),
+		mTime(0),
+		mFlags(0)
+	{}
+
 	LLUUID		mID;		// Agent ID
 	S32			mTime;		// Time (unix seconds) when entry expires
 	U32			mFlags;		// Not used - currently should always be zero
 	void setUserLocation(const LLVector3& pos)	{ mUserLocation = pos; }
 	void setUserLookAt(const LLVector3& rot)	{ mUserLookAt = rot; }
 	void setLandingType(const ELandingType type) { mLandingType = type; }
+	void setHiddenAVs(bool hidden_avs)	{ mHiddenAVs = hidden_avs;	}
+	void setHaveHiddenAVsData(bool have_hidden_av_data)		{ mHaveHiddenAVData = have_hidden_av_data;		}		// Remove this once hidden AV feature is fully available grid-wide
 
 	void setAuctionID(U32 auction_id) { mAuctionID = auction_id;}
 
 	const LLVector3& getUserLocation() const	{ return mUserLocation; }
 	const LLVector3& getUserLookAt() const	{ return mUserLookAt; }
 	ELandingType getLandingType() const	{ return mLandingType; }
+	bool getHiddenAVs() const			{ return mHiddenAVs;		}
+	bool getHaveHiddenAVsData() const	{ return mHaveHiddenAVData;	}
 
 	// User-specified snapshot
 	const LLUUID&	getSnapshotID() const		{ return mSnapshotID; }
 	LLVector3 mUserLocation;
 	LLVector3 mUserLookAt;
 	ELandingType mLandingType;
+	bool mHiddenAVs;				// Avatars are hidden on this parcel from outside it
+	bool mHaveHiddenAVData;			// Remove once hidden AV feature is grid-wide
 	LLTimer mSaleTimerExpires;
 	LLTimer mMediaResetTimer;
 

indra/llinventory/llparcelflags.h

 const S32 PARCEL_DETAILS_OWNER = 2;
 const S32 PARCEL_DETAILS_GROUP = 3;
 const S32 PARCEL_DETAILS_AREA = 4;
+const S32 PARCEL_DETAILS_ID = 5;
+const S32 PARCEL_DETAILS_HIDDEN_AVS = 6;
 
 #endif

indra/llmessage/message_prehash.cpp

 char const* const _PREHASH_FaceIndex = LLMessageStringTable::getInstance()->getString("FaceIndex");
 char const* const _PREHASH_StatusData = LLMessageStringTable::getInstance()->getString("StatusData");
 char const* const _PREHASH_ProductSKU = LLMessageStringTable::getInstance()->getString("ProductSKU");
+char const* const _PREHASH_HiddenAVs = LLMessageStringTable::getInstance()->getString("HiddenAVs");

indra/llmessage/message_prehash.h

 extern char const* const _PREHASH_FaceIndex;
 extern char const* const _PREHASH_StatusData;
 extern char const* const _PREHASH_ProductSKU;
+extern char const* const _PREHASH_HiddenAVs;
 #endif

indra/lscript/lscript_compile/indra.l

 "PARCEL_DETAILS_OWNER"	{ count(); yylval.ival = PARCEL_DETAILS_OWNER; return(INTEGER_CONSTANT); }
 "PARCEL_DETAILS_GROUP"	{ count(); yylval.ival = PARCEL_DETAILS_GROUP; return(INTEGER_CONSTANT); }
 "PARCEL_DETAILS_AREA"	{ count(); yylval.ival = PARCEL_DETAILS_AREA; return(INTEGER_CONSTANT); }
+"PARCEL_DETAILS_ID"		{ count(); yylval.ival = PARCEL_DETAILS_ID; return(INTEGER_CONSTANT); }
+"PARCEL_DETAILS_HIDDEN_AVS"	{ count(); yylval.ival = PARCEL_DETAILS_HIDDEN_AVS; return(INTEGER_CONSTANT); }
 
 "STRING_TRIM_HEAD"	{ count(); yylval.ival = STRING_TRIM_HEAD; return(INTEGER_CONSTANT); }
 "STRING_TRIM_TAIL"	{ count(); yylval.ival = STRING_TRIM_TAIL; return(INTEGER_CONSTANT); }

indra/newview/app_settings/keywords.ini

 PARCEL_DETAILS_GROUP	Used with llGetParcelDetails to get the parcel group id.
 PARCEL_DETAILS_AREA		Used with llGetParcelDetails to get the parcel area in square meters.
 PARCEL_DETAILS_ID		Used with llGetParcelDetails to get the parcel id.
+PARCEL_DETAILS_HIDDEN_AVS	Used with llGetParcelDetails to get the hidden avatars setting.
 
 STRING_TRIM_HEAD		Used with llStringTrim to trim leading spaces from a string.
 STRING_TRIM_TAIL		Used with llStringTrim to trim trailing spaces from a string.

indra/newview/llappviewer.cpp

File contents unchanged.

indra/newview/llfloaterland.cpp

 	mClearBtn(NULL),
 	mMatureCtrl(NULL),
 	mPushRestrictionCtrl(NULL),
+	mPrivateParcelCtrl(NULL),
 	mParcel(parcel)
 {
 }
 	mPushRestrictionCtrl = getChild<LLCheckBoxCtrl>( "PushRestrictCheck");
 	childSetCommitCallback("PushRestrictCheck", onCommitAny, this);
 
+	mPrivateParcelCtrl = getChild<LLCheckBoxCtrl>( "PrivateParcelCheck");
+	childSetCommitCallback("PrivateParcelCheck", onCommitAny, this);
+
 	mCheckShowDirectory = getChild<LLCheckBoxCtrl>( "ShowDirectoryCheck");
 	childSetCommitCallback("ShowDirectoryCheck", onCommitAny, this);
 
 		mPushRestrictionCtrl->set(FALSE);
 		mPushRestrictionCtrl->setEnabled(FALSE);
 
+		mPrivateParcelCtrl->set(FALSE);
+		mPrivateParcelCtrl->setEnabled(FALSE);
+
 		mLandingTypeCombo->setCurrentByIndex(0);
 		mLandingTypeCombo->setEnabled(FALSE);
 
 			mPushRestrictionCtrl->setEnabled(can_change_options);
 		}
 
+		mPrivateParcelCtrl->set(parcel->getHiddenAVs());
+		mPrivateParcelCtrl->setLabel(getString("hidden_avs_text"));
+		mPrivateParcelCtrl->setEnabled(can_change_options && parcel->getHaveHiddenAVsData());
+
 		BOOL can_change_landing_point = LLViewerParcelMgr::isParcelModifiableByAgent(parcel, 
 														GP_LAND_SET_LANDING_POINT);
 		mLandingTypeCombo->setCurrentByIndex((S32)parcel->getLandingType());
 	BOOL allow_publish		= FALSE;
 	BOOL mature_publish		= self->mMatureCtrl->get();
 	BOOL push_restriction	= self->mPushRestrictionCtrl->get();
+	BOOL hidden_avs     = self->mPrivateParcelCtrl->get();
 	BOOL show_directory		= self->mCheckShowDirectory->get();
 	// we have to get the index from a lookup, not from the position in the dropdown!
 	S32  category_index		= LLParcel::getCategoryFromString(self->mCategoryCombo->getSelectedValue());
 	parcel->setCategory((LLParcel::ECategory)category_index);
 	parcel->setLandingType((LLParcel::ELandingType)landing_type_index);
 	parcel->setSnapshotID(snapshot_id);
+	parcel->setHiddenAVs(hidden_avs);
 
 	// Send current parcel data upstream to server
 	LLViewerParcelMgr::getInstance()->sendParcelPropertiesUpdate( parcel );

indra/newview/llfloaterland.h

 
 	LLCheckBoxCtrl		*mMatureCtrl;
 	LLCheckBoxCtrl		*mPushRestrictionCtrl;
+	LLCheckBoxCtrl		*mPrivateParcelCtrl;
 
 	LLSafeHandle<LLParcelSelection>&	mParcel;
 };

indra/newview/lllocationinputctrl.cpp

 	scripts_icon("scripts_icon"),
 	damage_icon("damage_icon"),
 	damage_text("damage_text"),
+	hidden_av_icon("hidden_av_icon"),
 	maturity_help_topic("maturity_help_topic")
 {
 }
 	mDamageText = LLUICtrlFactory::create<LLTextBox>(damage_text);
 	addChild(mDamageText);
 	
+	LLIconCtrl::Params hidden_av_icon = p.hidden_av_icon;
+	hidden_av_icon.tool_tip = LLTrans::getString("LocationCtrlHiddenAVsTooltip");
+	hidden_av_icon.mouse_opaque = true;
+	mParcelIcon[HIDDEN_AV_ICON] = LLUICtrlFactory::create<LLIconCtrl>(hidden_av_icon);
+	mParcelIcon[HIDDEN_AV_ICON]->setMouseDownCallback(boost::bind(&LLLocationInputCtrl::onParcelIconClick, this, HIDDEN_AV_ICON));
+	addChild(mParcelIcon[HIDDEN_AV_ICON]);
+	
 	// Register callbacks and load the location field context menu (NB: the order matters).
 	LLUICtrl::CommitCallbackRegistry::currentRegistrar().add("Navbar.Action", boost::bind(&LLLocationInputCtrl::onLocationContextMenuItemClicked, this, _2));
 	LLUICtrl::EnableCallbackRegistry::currentRegistrar().add("Navbar.EnableMenuItem", boost::bind(&LLLocationInputCtrl::onLocationContextMenuItemEnabled, this, _2));
 		bool allow_build	= vpm->allowAgentBuild(current_parcel); // true when anyone is allowed to build. See EXT-4610.
 		bool allow_scripts	= vpm->allowAgentScripts(agent_region, current_parcel);
 		bool allow_damage	= vpm->allowAgentDamage(agent_region, current_parcel);
+		bool hidden_avs        = current_parcel->getHiddenAVs();
 
 		// Most icons are "block this ability"
 		mParcelIcon[VOICE_ICON]->setVisible(   !allow_voice );
 		mParcelIcon[SCRIPTS_ICON]->setVisible( !allow_scripts );
 		mParcelIcon[DAMAGE_ICON]->setVisible(  allow_damage );
 		mDamageText->setVisible(allow_damage);
+		mParcelIcon[HIDDEN_AV_ICON]->setVisible( hidden_avs );
 
 		// Padding goes to left of both landmark star and for sale btn
 		x -= mAddLandmarkHPad;
 	case DAMAGE_ICON:
 		LLNotificationsUtil::add("NotSafe");
 		break;
+	case HIDDEN_AV_ICON:
+		LLNotificationsUtil::add("HiddenAVs");
+		break;
 	case ICON_COUNT:
 		break;
 	// no default to get compiler warning when a new icon gets added

indra/newview/lllocationinputctrl.h

 											push_icon,
 											build_icon,
 											scripts_icon,
-											damage_icon;
+											damage_icon,
+											hidden_av_icon;
 		Optional<LLTextBox::Params>			damage_text;
 		Params();
 	};
 	enum EParcelIcon
 	{
 		VOICE_ICON = 0,
-		FLY_ICON,
-		PUSH_ICON,
-		BUILD_ICON,
-		SCRIPTS_ICON,
-		DAMAGE_ICON,
-		ICON_COUNT
+		FLY_ICON,			// 1
+		PUSH_ICON,			// 2
+		BUILD_ICON,			// 3
+		SCRIPTS_ICON,		// 4
+		DAMAGE_ICON,		// 5
+		HIDDEN_AV_ICON,		// 6
+		ICON_COUNT			// 7 total
 	};
 
 	friend class LLUICtrlFactory;

indra/newview/llpanelplaceprofile.cpp

 static std::string icon_scripts_no;
 static std::string icon_damage;
 static std::string icon_damage_no;
+static std::string icon_hidden_avs_on;
+static std::string icon_hidden_avs_off;
 
 LLPanelPlaceProfile::LLPanelPlaceProfile()
 :	LLPanelPlaceInfo(),
 	mScriptsText = getChild<LLTextBox>("scripts_value");
 	mDamageIcon = getChild<LLIconCtrl>("damage_icon");
 	mDamageText = getChild<LLTextBox>("damage_value");
+	mHiddenAVsIcon = getChild<LLIconCtrl>("hidden_av_icon");
+	mHiddenAVsText = getChild<LLTextBox>("hidden_av_value");
 
 	mRegionNameText = getChild<LLTextBox>("region_name");
 	mRegionTypeText = getChild<LLTextBox>("region_type");
 	icon_scripts_no = getString("icon_ScriptsNo");
 	icon_damage = getString("icon_Damage");
 	icon_damage_no = getString("icon_DamageNo");
+	icon_hidden_avs_on = getString("icon_HiddenAVsOn");
+	icon_hidden_avs_off = getString("icon_HiddenAVsOff");
 
 	return TRUE;
 }
 	mScriptsText->setText(loading);
 	mDamageIcon->setValue(loading);
 	mDamageText->setText(loading);
+	mHiddenAVsIcon->setValue(loading);
+	mHiddenAVsText->setText(loading);
 
 	mRegionNameText->setValue(loading);
 	mRegionTypeText->setValue(loading);
 		mDamageText->setText(off);
 	}
 
+	if (parcel->getHiddenAVs())
+	{
+		mHiddenAVsIcon->setValue(icon_hidden_avs_on);
+		mHiddenAVsText->setText(on);
+	}
+	else
+	{
+		mHiddenAVsIcon->setValue(icon_hidden_avs_off);
+		mHiddenAVsText->setText(off);
+	}
+
 	mRegionNameText->setText(region->getName());
 	mRegionTypeText->setText(region->getSimProductName());
 

indra/newview/llpanelplaceprofile.h

 	LLTextBox*			mScriptsText;
 	LLIconCtrl*			mDamageIcon;
 	LLTextBox*			mDamageText;
+	LLIconCtrl*			mHiddenAVsIcon;
+	LLTextBox*			mHiddenAVsText;
 
 	LLTextBox*			mRegionNameText;
 	LLTextBox*			mRegionTypeText;

indra/newview/llpaneltopinfobar.cpp

 	mParcelIcon[BUILD_ICON] = getChild<LLIconCtrl>("build_icon");
 	mParcelIcon[SCRIPTS_ICON] = getChild<LLIconCtrl>("scripts_icon");
 	mParcelIcon[DAMAGE_ICON] = getChild<LLIconCtrl>("damage_icon");
+	mParcelIcon[HIDDEN_AV_ICON] = getChild<LLIconCtrl>("hidden_av_icon");
 
 	mParcelIcon[VOICE_ICON]->setToolTip(LLTrans::getString("LocationCtrlVoiceTooltip"));
 	mParcelIcon[FLY_ICON]->setToolTip(LLTrans::getString("LocationCtrlFlyTooltip"));
 	mParcelIcon[BUILD_ICON]->setToolTip(LLTrans::getString("LocationCtrlBuildTooltip"));
 	mParcelIcon[SCRIPTS_ICON]->setToolTip(LLTrans::getString("LocationCtrlScriptsTooltip"));
 	mParcelIcon[DAMAGE_ICON]->setToolTip(LLTrans::getString("LocationCtrlDamageTooltip"));
+	mParcelIcon[HIDDEN_AV_ICON]->setToolTip(LLTrans::getString("LocationCtrlHiddenAVsTooltip"));
 
 	mParcelIcon[VOICE_ICON]->setMouseDownCallback(boost::bind(&LLPanelTopInfoBar::onParcelIconClick, this, VOICE_ICON));
 	mParcelIcon[FLY_ICON]->setMouseDownCallback(boost::bind(&LLPanelTopInfoBar::onParcelIconClick, this, FLY_ICON));
 	mParcelIcon[BUILD_ICON]->setMouseDownCallback(boost::bind(&LLPanelTopInfoBar::onParcelIconClick, this, BUILD_ICON));
 	mParcelIcon[SCRIPTS_ICON]->setMouseDownCallback(boost::bind(&LLPanelTopInfoBar::onParcelIconClick, this, SCRIPTS_ICON));
 	mParcelIcon[DAMAGE_ICON]->setMouseDownCallback(boost::bind(&LLPanelTopInfoBar::onParcelIconClick, this, DAMAGE_ICON));
+	mParcelIcon[HIDDEN_AV_ICON]->setMouseDownCallback(boost::bind(&LLPanelTopInfoBar::onParcelIconClick, this, HIDDEN_AV_ICON));
 
 	mDamageText->setText(LLStringExplicit("100%"));
 }
 		bool allow_build	= vpm->allowAgentBuild(current_parcel); // true when anyone is allowed to build. See EXT-4610.
 		bool allow_scripts	= vpm->allowAgentScripts(agent_region, current_parcel);
 		bool allow_damage	= vpm->allowAgentDamage(agent_region, current_parcel);
+		bool hidden_avs        = current_parcel->getHiddenAVs();
 
 		// Most icons are "block this ability"
 		mParcelIcon[VOICE_ICON]->setVisible(   !allow_voice );
 		mParcelIcon[SCRIPTS_ICON]->setVisible( !allow_scripts );
 		mParcelIcon[DAMAGE_ICON]->setVisible(  allow_damage );
 		mDamageText->setVisible(allow_damage);
+		mParcelIcon[HIDDEN_AV_ICON]->setVisible( hidden_avs );
 
 		layoutParcelIcons();
 	}
 	case DAMAGE_ICON:
 		LLNotificationsUtil::add("NotSafe");
 		break;
+	case HIDDEN_AV_ICON:
+		LLNotificationsUtil::add("HiddenAVs");
+		break;
 	case ICON_COUNT:
 		break;
 	// no default to get compiler warning when a new icon gets added

indra/newview/llpaneltopinfobar.h

 	enum EParcelIcon
 	{
 		VOICE_ICON = 0,
-		FLY_ICON,
-		PUSH_ICON,
-		BUILD_ICON,
-		SCRIPTS_ICON,
-		DAMAGE_ICON,
-		ICON_COUNT
+		FLY_ICON,			// 1
+		PUSH_ICON,			// 2
+		BUILD_ICON,			// 3
+		SCRIPTS_ICON,		// 4
+		DAMAGE_ICON,		// 5
+		HIDDEN_AV_ICON,		// 6
+		ICON_COUNT			// 7 total
 	};
 
 	/**

indra/newview/llviewermedia.cpp

File contents unchanged.

indra/newview/llviewermessage.cpp

File contents unchanged.

indra/newview/llvoavatar.cpp

 			llinfos << "Re-requesting AvatarAppearance for object: "  << getID() << llendl;
 			LLAvatarPropertiesProcessor::getInstance()->sendAvatarTexturesRequest(getID());
 			mRuthTimer.reset();
-	}
-	else
-	{
+		}
+		else
+		{
 			llinfos << "That's okay, we already have a non-default shape for object: "  << getID() << llendl;
 			// we don't really care.
 		}

indra/newview/skins/default/textures/icons/Parcel_HiddenAVsOff_Dark.png

Added
New image

indra/newview/skins/default/textures/icons/Parcel_HiddenAVsOn_Dark.png

Added
New image

indra/newview/skins/default/textures/textures.xml

-<!--
+<!--
 This file contains metadata about how to load, display, and scale textures for rendering in the UI.
 Images do *NOT* have to appear in this file in order to use them as textures in the UI...simply refer
 to them by filename (relative to textures directory).
  <texture name="Parcel_ScriptsNo_Dark" file_name="icons/Parcel_ScriptsNo_Dark.png" preload="false" />
  <texture name="Parcel_Voice_Dark" file_name="icons/Parcel_Voice_Dark.png" preload="false" />
  <texture name="Parcel_VoiceNo_Dark" file_name="icons/Parcel_VoiceNo_Dark.png" preload="false" />
+ <texture name="Parcel_HiddenAVsOff_Dark" file_name="icons/Parcel_HiddenAVsOff_Dark.png" preload="false" />
+ <texture name="Parcel_HiddenAVsOn_Dark" file_name="icons/Parcel_HiddenAVsOn_Dark.png" preload="false" />
 
  <texture name="Parcel_BuildNo_Light" file_name="icons/Parcel_BuildNo_Light.png" preload="false" />
  <texture name="Parcel_FlyNo_Light" file_name="icons/Parcel_FlyNo_Light.png" preload="false" />

indra/newview/skins/default/xui/da/notifications.xml

File contents unchanged.

indra/newview/skins/default/xui/de/notifications.xml

File contents unchanged.

indra/newview/skins/default/xui/en/floater_about_land.xml

              name="push_restrict_region_text">
                 No Pushing (Region Override)
             </panel.string>
+            <panel.string
+             name="hidden_avs_text">
+                Hidden Avatars
+            </panel.string>
             <text
              type="string"
              length="1"
              name="check safe"
              tool_tip="If checked, sets the land to Safe, disabling damage combat. If cleared, damage combat is enabled."
              top_pad="5"
-             width="200" />
+             width="280" />
             <check_box
              height="16"
              label="No Pushing"
              left="14"
              name="ShowDirectoryCheck"
              tool_tip="Let people see this parcel in search results"
-             width="430" />
+             width="280" />
+            <check_box
+             height="16"
+             label="Private Parcel"
+             layout="topleft"
+             left_pad="5"
+             name="PrivateParcelCheck"
+             tool_tip="Prevents avatars from seeing into or out of the parcel."
+             top_delta="0"
+             width="119" />
             <combo_box
              enabled="false"
              height="23"

indra/newview/skins/default/xui/en/floater_web_content.xml

File contents unchanged.

indra/newview/skins/default/xui/en/menu_viewer.xml

                  function="Floater.Toggle"
                  parameter="region_debug_console" />
             </menu_item_check>
+            <menu_item_check
+             label="Region Debug Console"
+             name="Region Debug Console"
+             shortcut="control|shift|`"
+             use_mac_ctrl="true">
+                <menu_item_check.on_check
+                 function="Floater.Visible"
+                 parameter="region_debug_console" />
+                <menu_item_check.on_click
+                 function="Floater.Toggle"
+                 parameter="region_debug_console" />
+            </menu_item_check>
             <menu_item_separator />
 
             <menu_item_check

indra/newview/skins/default/xui/en/notifications.xml

 
   <notification
    icon="notify.tga"
+   name="HiddenAVs"
+   persist="true"
+   type="notify"
+   unique="true">
+This parcel hides avatars from view from another parcel.   You can&apos;t see others outside the parcel, and those outside are not able to see you.
+  </notification>
+
+  <notification
+   icon="notify.tga"
    name="ScriptsStopped"
    persist="true"
    type="notify">

indra/newview/skins/default/xui/en/panel_place_profile.xml

      name="icon_DamageNo"
      translate="false"
      value="Parcel_DamageNo_Dark" />
+    <string
+     name="icon_HiddenAVsOff"
+     translate="false"
+     value="Parcel_HiddenAVsOff_Dark" />
+    <string
+     name="icon_HiddenAVsOn"
+     translate="false"
+     value="Parcel_HiddenAVsOn_Dark" />
     <button
      follows="top|left"
      height="24"
                  title="Parcel">
                     <panel
                      follows="all"
-                     height="175"
+                     height="200"
                      layout="topleft"
                      left="0"
                      name="parcel_characteristics_panel"
                          top_delta="0"
                          value="Off"
                          width="60" />
+                        <icon
+                         follows="top|left"
+                         height="18"
+                         image_name="Parcel_HiddenAVsOff_Dark"
+                         layout="topleft"
+                         left="10"
+                         name="hidden_av_icon"
+                         top_pad="7"
+                         width="22" />
+                        <text
+                         follows="left|top"
+                         height="14"
+                         layout="topleft"
+                         left_pad="8"
+                         name="hidden_avs_label"
+                         value="Hidden Avatars:"
+                         width="90" />
+                        <text
+                         follows="left|top"
+                         height="14"
+                         layout="topleft"
+                         left_pad="0"
+                         name="hidden_av_value"
+                         value="Off"
+                         width="60" />
                         <button
                          follows="bottom|right"
                          height="23"

indra/newview/skins/default/xui/en/panel_topinfo_bar.xml

     visible="false"
     width="14"
     />
+  <icon
+    follows="right|top"
+    height="13"
+    image_name="Parcel_HiddenAVsOff_Dark"
+    left="2"
+    name="hidden_av_icon"
+    top="3"
+    visible="false"
+    width="14"
+    />
   <text
     follows="right|top"
     font="SansSerifSmall"

indra/newview/skins/default/xui/en/strings.xml

 Returns the maximum number of prims allowed on the parcel at pos
 	</string>
 	<string name="LSLTipText_llGetParcelDetails" translate="false">
-list llGetParcelDetails(vector pos, list params)
-Returns the parcel details specified in params for the parcel at pos.
-Params is one or more of: PARCEL_DETAILS_NAME, _DESC, _OWNER, _GROUP, _AREA
-	</string>
+    list llGetParcelDetails(vector pos, list params)
+    Returns the parcel details specified in params for the parcel at pos.
+    Params is one or more of: PARCEL_DETAILS_NAME, _DESC, _OWNER, _GROUP, _AREA, _ID, _HIDDEN_AVS
+  </string>
 	<string name="LSLTipText_llSetLinkPrimitiveParams" translate="false">
 llSetLinkPrimitiveParams(integer linknumber, list rules)
 Sets primitive parameters for linknumber based on rules
   <string name="LocationCtrlAdultIconTooltip">Adult Region</string>
   <string name="LocationCtrlModerateIconTooltip">Moderate Region</string>
   <string name="LocationCtrlGeneralIconTooltip">General Region</string>
+  <string name="LocationCtrlHiddenAVsTooltip">Hidden Avatars Parcel</string>
 
   <!-- Strings used by the (currently Linux) auto-updater app -->
 	<string name="UpdaterWindowTitle">

indra/newview/skins/default/xui/en/widgets/location_input.xml

 	font="SansSerifSmall"
 	text_color="TextFgColor"
 	/>
+  <hidden_av_icon
+    name="hidden_av_icon"
+    width="22"
+    height="18"
+    top="21"
+    follows="right|top"
+    image_name="Parcel_HiddenAVsOn_Dark"
+    />
   <combo_button
 		name="Location History"
                 label=""

indra/newview/skins/default/xui/es/notifications.xml

File contents unchanged.

indra/newview/skins/default/xui/fr/notifications.xml

File contents unchanged.

indra/newview/skins/default/xui/pl/notifications.xml

File contents unchanged.

indra/newview/skins/default/xui/pt/notifications.xml

File contents unchanged.

indra/newview/skins/minimal/xui/en/widgets/location_input.xml

 	  font="SansSerifSmall"
 	  text_color="TextFgColor"
 	/>
+  <hidden_av_icon
+    name="hidden_av_icon"
+    width="0"
+    height="0"
+    visible="false" 
+    top="21"
+    follows="right|top"
+    />
   <combo_button
 		name="Location History"
                 label=""