diff options
43 files changed, 648 insertions, 260 deletions
| diff --git a/indra/llui/lldockablefloater.cpp b/indra/llui/lldockablefloater.cpp index 6a5b475134..74438b184a 100644 --- a/indra/llui/lldockablefloater.cpp +++ b/indra/llui/lldockablefloater.cpp @@ -57,6 +57,7 @@ LLDockableFloater::LLDockableFloater(LLDockControl* dockControl,  	, mOverlapsScreenChannel(false)  {  	init(this); +	mUseTongue = true;  }  LLDockableFloater::LLDockableFloater(LLDockControl* dockControl, bool uniqueDocking, @@ -64,6 +65,14 @@ LLDockableFloater::LLDockableFloater(LLDockControl* dockControl, bool uniqueDock  	LLFloater(key, params), mDockControl(dockControl), mUniqueDocking(uniqueDocking)  {  	init(this); +	mUseTongue = true; +} + +LLDockableFloater::LLDockableFloater(LLDockControl* dockControl, bool uniqueDocking, +		bool useTongue, const LLSD& key, const Params& params) : +	LLFloater(key, params), mDockControl(dockControl), mUseTongue(useTongue), mUniqueDocking(uniqueDocking) +{ +	init(this);  }  LLDockableFloater::~LLDockableFloater() diff --git a/indra/llui/lldockablefloater.h b/indra/llui/lldockablefloater.h index ae4f99e205..2b1ce99ae2 100644 --- a/indra/llui/lldockablefloater.h +++ b/indra/llui/lldockablefloater.h @@ -62,6 +62,20 @@ public:  	 */  	LLDockableFloater(LLDockControl* dockControl, bool uniqueDocking,  			const LLSD& key, const Params& params = getDefaultParams()); + +	/** +	 * Constructor. +	 * @param dockControl a pointer to the doc control instance +	 * @param uniqueDocking - a flag defines is docking should work as tab(at one +	 * moment only one docked floater can be shown). +	 * @praram useTongue - a flag defines is dock tongue should be used. +	 * @params key a floater key. + 	 * @params params a floater parameters +	 */ +	LLDockableFloater(LLDockControl* dockControl, bool uniqueDocking, +			bool useTongue, const LLSD& key, +			const Params& params = getDefaultParams()); +  	virtual ~LLDockableFloater();  	static LLHandle<LLFloater> getInstanceHandle() { return sInstanceHandle; } @@ -104,6 +118,7 @@ public:  	virtual void setOverlapsScreenChannel(bool overlaps) { mOverlapsScreenChannel = overlaps; }  	bool getUniqueDocking() { return mUniqueDocking;	} +	bool getUseTongue() { return mUseTongue; }  private:  	/**  	 * Provides unique of dockable floater. @@ -125,6 +140,8 @@ private:  	 */  	bool mUniqueDocking; +	bool mUseTongue; +  	bool mOverlapsScreenChannel;  }; diff --git a/indra/llui/lldockcontrol.cpp b/indra/llui/lldockcontrol.cpp index 1c3c8449c5..0d8e54aa48 100644 --- a/indra/llui/lldockcontrol.cpp +++ b/indra/llui/lldockcontrol.cpp @@ -182,12 +182,12 @@ void LLDockControl::moveDockable()  	LLRect rootRect;  	mGetAllowedRectCallback(rootRect); -	bool unique_docking = false; +	bool use_tongue = false;  	LLDockableFloater* dockable_floater =  			dynamic_cast<LLDockableFloater*> (mDockableFloater);  	if (dockable_floater != NULL)  	{ -		unique_docking = dockable_floater->getUniqueDocking(); +		use_tongue = dockable_floater->getUseTongue();  	}  	LLRect dockableRect = mDockableFloater->calcScreenRect(); @@ -218,7 +218,7 @@ void LLDockControl::moveDockable()  		x = dockRect.getCenterX() - dockableRect.getWidth() / 2;  		y = dockRect.mTop + dockableRect.getHeight();  		// unique docking used with dock tongue, so add tongue height o the Y coordinate -		if (unique_docking) +		if (use_tongue)  		{  			y += mDockTongue->getHeight();  		} @@ -287,15 +287,15 @@ void LLDockControl::forceRecalculatePosition()  void LLDockControl::drawToungue()  { -	bool unique_docking = false; +	bool use_tongue = false;  	LLDockableFloater* dockable_floater =  			dynamic_cast<LLDockableFloater*> (mDockableFloater);  	if (dockable_floater != NULL)  	{ -		unique_docking = dockable_floater->getUniqueDocking(); +		use_tongue = dockable_floater->getUseTongue();  	} -	if (mEnabled && unique_docking) +	if (mEnabled && use_tongue)  	{  		mDockTongue->draw(mDockTongueX, mDockTongueY);  	} diff --git a/indra/llui/llflatlistview.cpp b/indra/llui/llflatlistview.cpp index 3754d155cf..9cfc67af14 100644 --- a/indra/llui/llflatlistview.cpp +++ b/indra/llui/llflatlistview.cpp @@ -906,7 +906,8 @@ void LLFlatListView::notifyParentItemsRectChanged()  	params["width"] = req_rect.getWidth();  	params["height"] = req_rect.getHeight(); -	getParent()->notifyParent(params); +	if (getParent()) // dummy widgets don't have a parent +		getParent()->notifyParent(params);  }  void LLFlatListView::setNoItemsCommentVisible(bool visible) const diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml index 82ca4df7c8..7b6c0b235b 100644 --- a/indra/newview/app_settings/settings.xml +++ b/indra/newview/app_settings/settings.xml @@ -408,6 +408,17 @@        <key>Value</key>        <integer>1</integer>      </map> +    <key>AvalinePhoneSeparator</key> +    <map> +      <key>Comment</key> +      <string>Separator of phone parts to have Avaline numbers human readable in Voice Control Panel</string> +      <key>Persist</key> +      <integer>1</integer> +      <key>Type</key> +      <string>String</string> +      <key>Value</key> +      <string>-</string> +    </map>      <key>AvatarAxisDeadZone0</key>      <map>        <key>Comment</key> diff --git a/indra/newview/llagent.cpp b/indra/newview/llagent.cpp index d2a56f65dd..5e2e374df6 100644 --- a/indra/newview/llagent.cpp +++ b/indra/newview/llagent.cpp @@ -2812,7 +2812,7 @@ void LLAgent::endAnimationUpdateUI()  		LLToolMgr::getInstance()->setCurrentToolset(gBasicToolset); -		LLFloaterCamera::toPrevModeIfInAvatarViewMode(); +		LLFloaterCamera::onLeavingMouseLook();  		// Only pop if we have pushed...  		if (TRUE == mViewsPushed) @@ -2915,10 +2915,6 @@ void LLAgent::endAnimationUpdateUI()  		// JC - Added for always chat in third person option  		gFocusMgr.setKeyboardFocus(NULL); -		//Making sure Camera Controls floater is in the right state  -		//when entering Mouse Look using wheel scrolling -		LLFloaterCamera::updateIfNotInAvatarViewMode(); -  		LLToolMgr::getInstance()->setCurrentToolset(gMouselookToolset);  		mViewsPushed = TRUE; diff --git a/indra/newview/llavataractions.cpp b/indra/newview/llavataractions.cpp index 2a8c55e5db..c3deb602ee 100644 --- a/indra/newview/llavataractions.cpp +++ b/indra/newview/llavataractions.cpp @@ -168,8 +168,28 @@ void LLAvatarActions::offerTeleport(const LLUUID& invitee)  // static  void LLAvatarActions::offerTeleport(const std::vector<LLUUID>& ids)   { -	if (ids.size() > 0) -		handle_lure(ids); +	if (ids.size() == 0) +		return; + +	handle_lure(ids); + +	// Record the offer. +	for (std::vector<LLUUID>::const_iterator it = ids.begin(); it != ids.end(); it++) +	{ +		LLUUID target_id = *it; +		std::string target_name; + +		gCacheName->getFullName(target_id, target_name); + +		LLSD args; +		args["TO_NAME"] = target_name; + +		LLSD payload; +		payload["from_id"] = target_id; +		payload["SESSION_NAME"] = target_name; +		payload["SUPPRESS_TOAST"] = true; +		LLNotificationsUtil::add("TeleportOfferSent", args, payload); +	}  }  // static @@ -595,9 +615,11 @@ void LLAvatarActions::requestFriendship(const LLUUID& target_id, const std::stri  	LLSD args;  	args["TO_NAME"] = target_name; +  	LLSD payload; +	payload["from_id"] = target_id;  	payload["SESSION_NAME"] = target_name; -	payload["SUPPRES_TOST"] = true; +	payload["SUPPRESS_TOAST"] = true;  	LLNotificationsUtil::add("FriendshipOffered", args, payload);  } diff --git a/indra/newview/llcallfloater.cpp b/indra/newview/llcallfloater.cpp index a402f59fa1..1468f6d584 100644 --- a/indra/newview/llcallfloater.cpp +++ b/indra/newview/llcallfloater.cpp @@ -47,6 +47,7 @@  #include "llfloaterreg.h"  #include "llparticipantlist.h"  #include "llspeakers.h" +#include "lltextutil.h"  #include "lltransientfloatermgr.h"  #include "llviewerwindow.h"  #include "llvoicechannel.h" @@ -76,6 +77,12 @@ public:  		return rv;  	} +	void setName(const std::string& name) +	{ +		const std::string& formatted_phone = LLTextUtil::formatPhoneNumber(name); +		LLAvatarListItem::setName(formatted_phone); +	} +  	void setSpeakerId(const LLUUID& id) { mSpeakingIndicator->setSpeakerId(id); }  }; @@ -270,6 +277,11 @@ void LLCallFloater::updateSession()  		case IM_NOTHING_SPECIAL:  		case IM_SESSION_P2P_INVITE:  			mVoiceType = VC_PEER_TO_PEER; + +			if (!im_session->mOtherParticipantIsAvatar) +			{ +				mVoiceType = VC_PEER_TO_PEER_AVALINE; +			}  			break;  		case IM_SESSION_CONFERENCE_START:  		case IM_SESSION_GROUP_START: @@ -321,16 +333,13 @@ void LLCallFloater::updateSession()  void LLCallFloater::refreshParticipantList()  { -	bool non_avatar_caller = false; -	if (VC_PEER_TO_PEER == mVoiceType) +	bool non_avatar_caller = VC_PEER_TO_PEER_AVALINE == mVoiceType; + +	if (non_avatar_caller)  	{  		LLIMModel::LLIMSession* session = LLIMModel::instance().findIMSession(mSpeakerManager->getSessionID()); -		non_avatar_caller = !session->mOtherParticipantIsAvatar; -		if (non_avatar_caller) -		{ -			mNonAvatarCaller->setSpeakerId(session->mOtherParticipantID); -			mNonAvatarCaller->setName(session->mName); -		} +		mNonAvatarCaller->setSpeakerId(session->mOtherParticipantID); +		mNonAvatarCaller->setName(session->mName);  	}  	mNonAvatarCaller->setVisible(non_avatar_caller); @@ -390,9 +399,17 @@ void LLCallFloater::updateTitle()  		title = getString("title_nearby");  		break;  	case VC_PEER_TO_PEER: +	case VC_PEER_TO_PEER_AVALINE:  		{ +			title = voice_channel->getSessionName(); + +			if (VC_PEER_TO_PEER_AVALINE == mVoiceType) +			{ +				title = LLTextUtil::formatPhoneNumber(title); +			} +  			LLStringUtil::format_map_t args; -			args["[NAME]"] = voice_channel->getSessionName(); +			args["[NAME]"] = title;  			title = getString("title_peer_2_peer", args);  		}  		break; diff --git a/indra/newview/llcallfloater.h b/indra/newview/llcallfloater.h index 8aba93fc43..2b40225906 100644 --- a/indra/newview/llcallfloater.h +++ b/indra/newview/llcallfloater.h @@ -88,7 +88,8 @@ private:  		VC_LOCAL_CHAT,  		VC_GROUP_CHAT,  		VC_AD_HOC_CHAT, -		VC_PEER_TO_PEER +		VC_PEER_TO_PEER, +		VC_PEER_TO_PEER_AVALINE  	}EVoiceControls;  	typedef enum e_speaker_state diff --git a/indra/newview/llchatitemscontainerctrl.cpp b/indra/newview/llchatitemscontainerctrl.cpp index 92df281307..60a37ac4af 100644 --- a/indra/newview/llchatitemscontainerctrl.cpp +++ b/indra/newview/llchatitemscontainerctrl.cpp @@ -253,10 +253,32 @@ void LLNearbyChatToastPanel::onMouseEnter				(S32 x, S32 y, MASK mask)  BOOL	LLNearbyChatToastPanel::handleMouseDown	(S32 x, S32 y, MASK mask)  { +	return LLPanel::handleMouseDown(x,y,mask); +} + +BOOL	LLNearbyChatToastPanel::handleMouseUp	(S32 x, S32 y, MASK mask) +{  	if(mSourceType != CHAT_SOURCE_AGENT) -		return LLPanel::handleMouseDown(x,y,mask); +		return LLPanel::handleMouseUp(x,y,mask); + +	LLChatMsgBox* text_box = getChild<LLChatMsgBox>("msg_text", false); +	S32 local_x = x - text_box->getRect().mLeft; +	S32 local_y = y - text_box->getRect().mBottom; +	 +	//if text_box process mouse up (ussually this is click on url) - we didn't show nearby_chat. +	if (text_box->pointInView(local_x, local_y) ) +	{ +		if (text_box->handleMouseUp(local_x,local_y,mask) == TRUE) +			return TRUE; +		else +		{ +			LLFloaterReg::showInstance("nearby_chat",LLSD()); +			return FALSE; +		} +	} +  	LLFloaterReg::showInstance("nearby_chat",LLSD()); -	return LLPanel::handleMouseDown(x,y,mask); +	return LLPanel::handleMouseUp(x,y,mask);  }  void	LLNearbyChatToastPanel::setHeaderVisibility(EShowItemHeader e) diff --git a/indra/newview/llchatitemscontainerctrl.h b/indra/newview/llchatitemscontainerctrl.h index 0a85c52401..f4b8655054 100644 --- a/indra/newview/llchatitemscontainerctrl.h +++ b/indra/newview/llchatitemscontainerctrl.h @@ -68,6 +68,7 @@ public:  	void	onMouseLeave	(S32 x, S32 y, MASK mask);  	void	onMouseEnter	(S32 x, S32 y, MASK mask);  	BOOL	handleMouseDown	(S32 x, S32 y, MASK mask); +	BOOL	handleMouseUp	(S32 x, S32 y, MASK mask);  	virtual BOOL postBuild(); diff --git a/indra/newview/llfavoritesbar.cpp b/indra/newview/llfavoritesbar.cpp index 6ae6b4877a..4103ccf175 100644 --- a/indra/newview/llfavoritesbar.cpp +++ b/indra/newview/llfavoritesbar.cpp @@ -644,7 +644,7 @@ LLXMLNodePtr LLFavoritesBarCtrl::getButtonXMLNode()  	bool success = LLUICtrlFactory::getLayeredXMLNode("favorites_bar_button.xml", buttonXMLNode);  	if (!success)  	{ -		llwarns << "Unable to read xml file with button for Favorites Bar: favorites_bar_button.xml" << llendl; +		llwarns << "Failed to create Favorites Bar button from favorites_bar_button.xml" << llendl;  		buttonXMLNode = NULL;  	}  	return buttonXMLNode; diff --git a/indra/newview/llfloatercamera.cpp b/indra/newview/llfloatercamera.cpp index 764aff68c9..9496e94780 100644 --- a/indra/newview/llfloatercamera.cpp +++ b/indra/newview/llfloatercamera.cpp @@ -144,6 +144,11 @@ void  LLPanelCameraZoom::onSliderValueChanged()  	mSavedSliderVal = val;  } +void activate_camera_tool() +{ +	LLToolMgr::getInstance()->setTransientTool(LLToolCamera::getInstance()); +}; +  //  // Member functions  // @@ -151,7 +156,7 @@ void  LLPanelCameraZoom::onSliderValueChanged()  /*static*/ bool LLFloaterCamera::inFreeCameraMode()  {  	LLFloaterCamera* floater_camera = LLFloaterCamera::findInstance(); -	if (floater_camera && floater_camera->mCurrMode == CAMERA_CTRL_MODE_FREE_CAMERA) +	if (floater_camera && floater_camera->mCurrMode == CAMERA_CTRL_MODE_FREE_CAMERA && gAgent.getCameraMode() != CAMERA_MODE_MOUSELOOK)  	{  		return true;  	} @@ -177,27 +182,17 @@ void LLFloaterCamera::update()  } -/*static*/ void LLFloaterCamera::updateIfNotInAvatarViewMode() -{ -	LLFloaterCamera* floater_camera = LLFloaterCamera::findInstance(); -	if (floater_camera && !floater_camera->inAvatarViewMode())  -	{ -		floater_camera->update(); -	} -} - -  void LLFloaterCamera::toPrevMode()  {  	switchMode(mPrevMode);  } -/*static*/ void LLFloaterCamera::toPrevModeIfInAvatarViewMode() +/*static*/ void LLFloaterCamera::onLeavingMouseLook()  {  	LLFloaterCamera* floater_camera = LLFloaterCamera::findInstance(); -	if (floater_camera && floater_camera->inAvatarViewMode()) +	if (floater_camera && floater_camera->inFreeCameraMode())  	{ -		floater_camera->toPrevMode(); +		activate_camera_tool();  	}  } @@ -325,7 +320,7 @@ void LLFloaterCamera::switchMode(ECameraControlMode mode)  		break;  	case CAMERA_CTRL_MODE_FREE_CAMERA: -		LLToolMgr::getInstance()->setTransientTool(LLToolCamera::getInstance()); +		activate_camera_tool();  		break;  	case CAMERA_CTRL_MODE_AVATAR_VIEW: diff --git a/indra/newview/llfloatercamera.h b/indra/newview/llfloatercamera.h index 5d44b4944d..45d5e9a845 100644 --- a/indra/newview/llfloatercamera.h +++ b/indra/newview/llfloatercamera.h @@ -61,7 +61,7 @@ public:  	/* callback for camera presets changing */  	static void onClickCameraPresets(const LLSD& param); -	static void toPrevModeIfInAvatarViewMode(); +	static void onLeavingMouseLook();  	/** resets current camera mode to orbit mode */  	static void resetCameraMode(); @@ -69,8 +69,6 @@ public:  	/* determines actual mode and updates ui */  	void update(); -	static void updateIfNotInAvatarViewMode(); -  	virtual void onOpen(const LLSD& key);  	virtual void onClose(bool app_quitting); diff --git a/indra/newview/llgrouplist.cpp b/indra/newview/llgrouplist.cpp index 3ca459a403..e75d35bea4 100644 --- a/indra/newview/llgrouplist.cpp +++ b/indra/newview/llgrouplist.cpp @@ -210,7 +210,6 @@ void LLGroupList::addNewItem(const LLUUID& id, const std::string& name, const LL  	item->setGroupID(id);  	item->setName(name, mNameFilter);  	item->setGroupIconID(icon_id); -//	item->setContextMenu(mContextMenu);  	item->childSetVisible("info_btn", false);  	item->childSetVisible("profile_btn", false); @@ -268,8 +267,9 @@ bool LLGroupList::onContextMenuItemEnable(const LLSD& userdata)  	LLUUID selected_group_id = getSelectedUUID();  	bool real_group_selected = selected_group_id.notNull(); // a "real" (not "none") group is selected +	// each group including "none" can be activated  	if (userdata.asString() == "activate") -		return real_group_selected && gAgent.getGroupID() != selected_group_id; +		return gAgent.getGroupID() != selected_group_id;  	return real_group_selected;  } @@ -283,7 +283,6 @@ LLGroupListItem::LLGroupListItem()  mGroupIcon(NULL),  mGroupNameBox(NULL),  mInfoBtn(NULL), -//mContextMenu(NULL), //TODO:  mGroupID(LLUUID::null)  {  	LLUICtrlFactory::getInstance()->buildPanel(this, "panel_group_list_item.xml"); diff --git a/indra/newview/llimfloater.cpp b/indra/newview/llimfloater.cpp index 259f629bdd..fdc5d14d97 100644 --- a/indra/newview/llimfloater.cpp +++ b/indra/newview/llimfloater.cpp @@ -120,6 +120,12 @@ void LLIMFloater::onFocusLost()  void LLIMFloater::onFocusReceived()  {  	LLIMModel::getInstance()->setActiveSessionID(mSessionID); + +	// return focus to the input field when active tab in the multitab container is clicked. +	if (isChatMultiTab() && mInputEditor) +	{ +		mInputEditor->setFocus(TRUE); +	}  }  // virtual @@ -618,6 +624,15 @@ void LLIMFloater::onInputEditorFocusReceived( LLFocusableElement* caller, void*  		//in disconnected state IM input editor should be disabled  		self->mInputEditor->setEnabled(!gDisconnected);  	} + +	// when IM Floater is a part of the multitab container LLTabContainer set focus to the first +	// child on tab button's mouse up. This leads input field lost focus. See EXT-3852. +	if (isChatMultiTab()) +	{ +		// So, clear control captured mouse to prevent LLTabContainer set focus on the panel's first child. +		// do not pass self->mInputEditor, this leads to have "Edit Text" mouse pointer wherever it is. +		gFocusMgr.setMouseCapture(NULL); +	}  }  // static diff --git a/indra/newview/llimview.cpp b/indra/newview/llimview.cpp index 40227539d0..daabf1f717 100644 --- a/indra/newview/llimview.cpp +++ b/indra/newview/llimview.cpp @@ -82,6 +82,7 @@  #include "llfirstuse.h"  #include "llagentui.h" +#include "lltextutil.h"  const static std::string IM_TIME("time");  const static std::string IM_TEXT("message"); @@ -92,6 +93,7 @@ const static std::string NO_SESSION("(IM Session Doesn't Exist)");  const static std::string ADHOC_NAME_SUFFIX(" Conference");  std::string LLCallDialogManager::sPreviousSessionlName = ""; +LLIMModel::LLIMSession::SType LLCallDialogManager::sPreviousSessionType = LLIMModel::LLIMSession::P2P_SESSION;  std::string LLCallDialogManager::sCurrentSessionlName = "";  LLIMModel::LLIMSession* LLCallDialogManager::sSession = NULL;  LLVoiceChannel::EState LLCallDialogManager::sOldState = LLVoiceChannel::STATE_READY; @@ -178,6 +180,7 @@ LLIMModel::LLIMSession::LLIMSession(const LLUUID& session_id, const std::string&  	if (IM_NOTHING_SPECIAL == type || IM_SESSION_P2P_INVITE == type)  	{  		mVoiceChannel  = new LLVoiceChannelP2P(session_id, name, other_participant_id); +		mOtherParticipantIsAvatar = LLVoiceClient::getInstance()->isParticipantAvatar(mSessionID);  		// check if it was AVALINE call  		if (!mOtherParticipantIsAvatar) @@ -208,7 +211,10 @@ LLIMModel::LLIMSession::LLIMSession(const LLUUID& session_id, const std::string&  	mSpeakers = new LLIMSpeakerMgr(mVoiceChannel);  	// All participants will be added to the list of people we've recently interacted with. -	mSpeakers->addListener(&LLRecentPeople::instance(), "add"); + +	// we need to add only _active_ speakers...so comment this.  +	// may delete this later on cleanup +	//mSpeakers->addListener(&LLRecentPeople::instance(), "add");  	//we need to wait for session initialization for outgoing ad-hoc and group chat session  	//correct session id for initiated ad-hoc chat will be received from the server @@ -224,7 +230,6 @@ LLIMModel::LLIMSession::LLIMSession(const LLUUID& session_id, const std::string&  	{  		mCallBackEnabled = LLVoiceClient::getInstance()->isSessionCallBackPossible(mSessionID);  		mTextIMPossible = LLVoiceClient::getInstance()->isSessionTextIMPossible(mSessionID); -		mOtherParticipantIsAvatar = LLVoiceClient::getInstance()->isParticipantAvatar(mSessionID);  	}  	if ( gSavedPerAccountSettings.getBOOL("LogShowHistory") ) @@ -377,6 +382,10 @@ void LLIMModel::LLIMSession::addMessage(const std::string& from, const LLUUID& f  		mSpeakers->speakerChatted(from_id);  		mSpeakers->setSpeakerTyping(from_id, FALSE);  	} + +	if( mSessionType == P2P_SESSION || +		mSessionType == ADHOC_SESSION) +		LLRecentPeople::instance().add(from_id);  }  void LLIMModel::LLIMSession::addMessagesFromHistory(const std::list<LLSD>& history) @@ -781,7 +790,7 @@ LLIMSpeakerMgr* LLIMModel::getSpeakerManager( const LLUUID& session_id ) const  	LLIMSession* session = findIMSession(session_id);  	if (!session)  	{ -		llwarns << "session " << session_id << "does not exist " << llendl; +		llwarns << "session " << session_id << " does not exist " << llendl;  		return NULL;  	} @@ -1360,6 +1369,13 @@ void LLCallDialogManager::onVoiceChannelChanged(const LLUUID &session_id)  		sCurrentSessionlName = ""; // Empty string results in "Nearby Voice Chat" after substitution  		return;  	} +	 +	if (sSession) +	{ +		// store previous session type to process Avaline calls in dialogs +		sPreviousSessionType = sSession->mSessionType; +	} +  	sSession = session;  	sSession->mVoiceChannel->setStateChangedCallback(LLCallDialogManager::onVoiceChannelStateChanged);  	if(sCurrentSessionlName != session->mName) @@ -1378,6 +1394,7 @@ void LLCallDialogManager::onVoiceChannelChanged(const LLUUID &session_id)  		mCallDialogPayload["session_name"] = sSession->mName;  		mCallDialogPayload["other_user_id"] = sSession->mOtherParticipantID;  		mCallDialogPayload["old_channel_name"] = sPreviousSessionlName; +		mCallDialogPayload["old_session_type"] = sPreviousSessionType;  		mCallDialogPayload["state"] = LLVoiceChannel::STATE_CALL_STARTED;  		mCallDialogPayload["disconnected_channel_name"] = sSession->mName;  		mCallDialogPayload["session_type"] = sSession->mSessionType; @@ -1407,6 +1424,7 @@ void LLCallDialogManager::onVoiceChannelStateChanged(const LLVoiceChannel::EStat  	mCallDialogPayload["session_name"] = sSession->mName;  	mCallDialogPayload["other_user_id"] = sSession->mOtherParticipantID;  	mCallDialogPayload["old_channel_name"] = sPreviousSessionlName; +	mCallDialogPayload["old_session_type"] = sPreviousSessionType;  	mCallDialogPayload["state"] = new_state;  	mCallDialogPayload["disconnected_channel_name"] = sSession->mName;  	mCallDialogPayload["session_type"] = sSession->mSessionType; @@ -1421,6 +1439,11 @@ void LLCallDialogManager::onVoiceChannelStateChanged(const LLVoiceChannel::EStat  		}  		break; +	case LLVoiceChannel::STATE_HUNG_UP: +		// this state is coming before session is changed, so, put it into payload map +		mCallDialogPayload["old_session_type"] = sSession->mSessionType; +		break; +  	case LLVoiceChannel::STATE_CONNECTED :  		ocd = LLFloaterReg::findTypedInstance<LLOutgoingCallDialog>("outgoing_call", LLOutgoingCallDialog::OCD_KEY);  		if (ocd) @@ -1561,7 +1584,15 @@ void LLOutgoingCallDialog::show(const LLSD& key)  	// tell the user which voice channel they are leaving  	if (!mPayload["old_channel_name"].asString().empty())  	{ -		childSetTextArg("leaving", "[CURRENT_CHAT]", mPayload["old_channel_name"].asString()); +		bool was_avaline_call = LLIMModel::LLIMSession::AVALINE_SESSION == mPayload["old_session_type"].asInteger(); + +		std::string old_caller_name = mPayload["old_channel_name"].asString(); +		if (was_avaline_call) +		{ +			old_caller_name = LLTextUtil::formatPhoneNumber(old_caller_name); +		} + +		childSetTextArg("leaving", "[CURRENT_CHAT]", old_caller_name);  	}  	else  	{ @@ -1575,10 +1606,18 @@ void LLOutgoingCallDialog::show(const LLSD& key)  	}  	std::string callee_name = mPayload["session_name"].asString(); + +	LLUUID session_id = mPayload["session_id"].asUUID(); +	bool is_avatar = LLVoiceClient::getInstance()->isParticipantAvatar(session_id); +  	if (callee_name == "anonymous")  	{  		callee_name = getString("anonymous");  	} +	else if (!is_avatar) +	{ +		callee_name = LLTextUtil::formatPhoneNumber(callee_name); +	}  	setTitle(callee_name); @@ -1728,16 +1767,21 @@ BOOL LLIncomingCallDialog::postBuild()  		call_type = getString(mPayload["notify_box_type"]);  	} +	 +	// check to see if this is an Avaline call +	bool is_avatar = LLVoiceClient::getInstance()->isParticipantAvatar(session_id); +	childSetVisible("Start IM", is_avatar); // no IM for avaline +  	if (caller_name == "anonymous")  	{  		caller_name = getString("anonymous");  	} -	 -	setTitle(caller_name + " " + call_type); +	else if (!is_avatar) +	{ +		caller_name = LLTextUtil::formatPhoneNumber(caller_name); +	} -	// check to see if this is an Avaline call -	bool is_avatar = LLVoiceClient::getInstance()->isParticipantAvatar(session_id); -	childSetVisible("Start IM", is_avatar); // no IM for avaline +	setTitle(caller_name + " " + call_type);  	LLUICtrl* caller_name_widget = getChild<LLUICtrl>("caller name");  	caller_name_widget->setValue(caller_name + " " + call_type); diff --git a/indra/newview/llimview.h b/indra/newview/llimview.h index 11860d0efb..20d8e28392 100644 --- a/indra/newview/llimview.h +++ b/indra/newview/llimview.h @@ -475,6 +475,7 @@ public:  protected:  	static std::string sPreviousSessionlName; +	static LLIMModel::LLIMSession::SType sPreviousSessionType;  	static std::string sCurrentSessionlName;  	static LLIMModel::LLIMSession* sSession;  	static LLVoiceChannel::EState sOldState; diff --git a/indra/newview/llinspectavatar.cpp b/indra/newview/llinspectavatar.cpp index dae980feb1..7f206cb873 100644 --- a/indra/newview/llinspectavatar.cpp +++ b/indra/newview/llinspectavatar.cpp @@ -112,6 +112,7 @@ private:  	void onClickAddFriend();  	void onClickViewProfile();  	void onClickIM(); +	void onClickCall();  	void onClickTeleport();  	void onClickInviteToGroup();  	void onClickPay(); @@ -204,6 +205,7 @@ LLInspectAvatar::LLInspectAvatar(const LLSD& sd)  	mCommitCallbackRegistrar.add("InspectAvatar.AddFriend",	boost::bind(&LLInspectAvatar::onClickAddFriend, this));	  	mCommitCallbackRegistrar.add("InspectAvatar.IM",  		boost::bind(&LLInspectAvatar::onClickIM, this));	 +	mCommitCallbackRegistrar.add("InspectAvatar.Call",		boost::bind(&LLInspectAvatar::onClickCall, this));	  	mCommitCallbackRegistrar.add("InspectAvatar.Teleport",	boost::bind(&LLInspectAvatar::onClickTeleport, this));	  	mCommitCallbackRegistrar.add("InspectAvatar.InviteToGroup",	boost::bind(&LLInspectAvatar::onClickInviteToGroup, this));	  	mCommitCallbackRegistrar.add("InspectAvatar.Pay",	boost::bind(&LLInspectAvatar::onClickPay, this));	 @@ -611,6 +613,12 @@ void LLInspectAvatar::onClickIM()  	closeFloater();  } +void LLInspectAvatar::onClickCall() +{  +	LLAvatarActions::startCall(mAvatarID); +	closeFloater(); +} +  void LLInspectAvatar::onClickTeleport()  {  	LLAvatarActions::offerTeleport(mAvatarID); diff --git a/indra/newview/llnearbychat.cpp b/indra/newview/llnearbychat.cpp index 2ad82d3e8e..e7043b2d00 100644 --- a/indra/newview/llnearbychat.cpp +++ b/indra/newview/llnearbychat.cpp @@ -63,7 +63,7 @@  static const S32 RESIZE_BAR_THICKNESS = 3;  LLNearbyChat::LLNearbyChat(const LLSD& key)  -	: LLDockableFloater(NULL, false, key) +	: LLDockableFloater(NULL, false, false, key)  	,mChatHistory(NULL)  { @@ -137,7 +137,7 @@ std::string appendTime()  	time_t utc_time;  	utc_time = time_corrected();  	std::string timeStr ="["+ LLTrans::getString("TimeHour")+"]:[" -		+LLTrans::getString("TimeMin")+"] "; +		+LLTrans::getString("TimeMin")+"]";  	LLSD substitution; diff --git a/indra/newview/llnotificationofferhandler.cpp b/indra/newview/llnotificationofferhandler.cpp index dd66a6c507..fad0c6a91e 100644 --- a/indra/newview/llnotificationofferhandler.cpp +++ b/indra/newview/llnotificationofferhandler.cpp @@ -112,8 +112,8 @@ bool LLOfferHandler::processNotification(const LLSD& notify)  				LLHandlerUtil::spawnIMSession(name, from_id);  			} -			if (notification->getPayload().has("SUPPRES_TOST") -						&& notification->getPayload()["SUPPRES_TOST"]) +			if (notification->getPayload().has("SUPPRESS_TOAST") +						&& notification->getPayload()["SUPPRESS_TOAST"])  			{  				LLNotificationsUtil::cancel(notification);  			} diff --git a/indra/newview/llpanelgroup.cpp b/indra/newview/llpanelgroup.cpp index fff2575893..94de17c17d 100644 --- a/indra/newview/llpanelgroup.cpp +++ b/indra/newview/llpanelgroup.cpp @@ -413,10 +413,13 @@ void LLPanelGroup::setGroupID(const LLUUID& group_id)  			if(tab_land->getDisplayChildren())  				tab_land->changeOpenClose(tab_land->getDisplayChildren());  		} + +		LLGroupData agent_gdatap; +		bool is_member = gAgent.getGroupData(mID,agent_gdatap); -		tab_roles->canOpenClose(true); -		tab_notices->canOpenClose(true); -		tab_land->canOpenClose(true); +		tab_roles->canOpenClose(is_member); +		tab_notices->canOpenClose(is_member); +		tab_land->canOpenClose(is_member);  		getChild<LLUICtrl>("group_name")->setVisible(true);  		getChild<LLUICtrl>("group_name_editor")->setVisible(false); diff --git a/indra/newview/llpanelimcontrolpanel.cpp b/indra/newview/llpanelimcontrolpanel.cpp index 279818d52f..b547997e7a 100644 --- a/indra/newview/llpanelimcontrolpanel.cpp +++ b/indra/newview/llpanelimcontrolpanel.cpp @@ -70,9 +70,9 @@ void LLPanelChatControlPanel::onVoiceChannelStateChanged(const LLVoiceChannel::E  void LLPanelChatControlPanel::updateButtons(bool is_call_started)  { -	childSetVisible("end_call_btn", is_call_started); -	childSetVisible("voice_ctrls_btn", is_call_started); -	childSetVisible("call_btn", ! is_call_started); +	childSetVisible("end_call_btn_panel", is_call_started); +	childSetVisible("voice_ctrls_btn_panel", is_call_started); +	childSetVisible("call_btn_panel", ! is_call_started);  }  LLPanelChatControlPanel::~LLPanelChatControlPanel() diff --git a/indra/newview/llpanelpicks.cpp b/indra/newview/llpanelpicks.cpp index 751705dd57..ada65c98a4 100644 --- a/indra/newview/llpanelpicks.cpp +++ b/indra/newview/llpanelpicks.cpp @@ -411,6 +411,7 @@ BOOL LLPanelPicks::postBuild()  	LLUICtrl::CommitCallbackRegistry::ScopedRegistrar plus_registar;  	plus_registar.add("Picks.Plus.Action", boost::bind(&LLPanelPicks::onPlusMenuItemClicked, this, _2)); +	mEnableCallbackRegistrar.add("Picks.Plus.Enable", boost::bind(&LLPanelPicks::isActionEnabled, this, _2));  	mPlusMenu = LLUICtrlFactory::getInstance()->createFromFile<LLToggleableMenu>("menu_picks_plus.xml", gMenuHolder, LLViewerMenuHolderGL::child_registry_t::instance());  	return TRUE; @@ -430,6 +431,18 @@ void LLPanelPicks::onPlusMenuItemClicked(const LLSD& param)  	}  } +bool LLPanelPicks::isActionEnabled(const LLSD& userdata) const +{ +	std::string command_name = userdata.asString(); + +	if (command_name == "new_pick" && LLAgentPicksInfo::getInstance()->isPickLimitReached()) +	{ +		return false; +	} + +	return true; +} +  void LLPanelPicks::onAccordionStateChanged(const LLAccordionCtrlTab* acc_tab)  {  	if(!mPicksAccTab->getDisplayChildren()) @@ -652,7 +665,6 @@ void LLPanelPicks::updateButtons()  	if (getAvatarId() == gAgentID)  	{ -		childSetEnabled(XML_BTN_NEW, !LLAgentPicksInfo::getInstance()->isPickLimitReached());  		childSetEnabled(XML_BTN_DELETE, has_selected);  	} diff --git a/indra/newview/llpanelpicks.h b/indra/newview/llpanelpicks.h index 1b2e35ca46..3f757e482e 100644 --- a/indra/newview/llpanelpicks.h +++ b/indra/newview/llpanelpicks.h @@ -97,6 +97,7 @@ private:  	void onClickMap();  	void onPlusMenuItemClicked(const LLSD& param); +	bool isActionEnabled(const LLSD& userdata) const;  	void onListCommit(const LLFlatListView* f_list);  	void onAccordionStateChanged(const LLAccordionCtrlTab* acc_tab); diff --git a/indra/newview/llpanelteleporthistory.cpp b/indra/newview/llpanelteleporthistory.cpp index 245f694ac6..65a3d9d41b 100644 --- a/indra/newview/llpanelteleporthistory.cpp +++ b/indra/newview/llpanelteleporthistory.cpp @@ -1045,4 +1045,11 @@ void LLTeleportHistoryPanel::onAccordionExpand(LLUICtrl* ctrl, const LLSD& param  	bool expanded = param.asBoolean();  	// Save accordion tab state to restore it in refresh()  	setAccordionCollapsedByUser(ctrl, !expanded); + +	// Reset selection upon accordion being collapsed +	// to disable "Teleport" and "Map" buttons for hidden item. +	if (!expanded && mLastSelectedFlatlList) +	{ +		mLastSelectedFlatlList->resetSelection(); +	}  } diff --git a/indra/newview/llsyswellwindow.cpp b/indra/newview/llsyswellwindow.cpp index a46ca1f8ac..44cf82540a 100644 --- a/indra/newview/llsyswellwindow.cpp +++ b/indra/newview/llsyswellwindow.cpp @@ -349,7 +349,6 @@ LLIMWellWindow::RowPanel::RowPanel(const LLSysWellWindow* parent, const LLUUID&  	}  	// Initialize chiclet. -	mChiclet->setRect(LLRect(5, 28, 30, 3)); // *HACK: workaround for (EXT-3599)  	mChiclet->setChicletSizeChangedCallback(boost::bind(&LLIMWellWindow::RowPanel::onChicletSizeChanged, this, mChiclet, _2));  	mChiclet->enableCounterControl(true);  	mChiclet->setCounter(chicletCounter); @@ -410,6 +409,11 @@ BOOL LLIMWellWindow::RowPanel::handleMouseDown(S32 x, S32 y, MASK mask)  	return LLPanel::handleMouseDown(x, y, mask);  } +// virtual +BOOL LLIMWellWindow::RowPanel::handleRightMouseDown(S32 x, S32 y, MASK mask) +{ +	return mChiclet->handleRightMouseDown(x, y, mask); +}  /************************************************************************/  /*         ObjectRowPanel implementation                                */  /************************************************************************/ @@ -553,6 +557,12 @@ BOOL LLIMWellWindow::ObjectRowPanel::handleMouseDown(S32 x, S32 y, MASK mask)  	return LLPanel::handleMouseDown(x, y, mask);  } +// virtual +BOOL LLIMWellWindow::ObjectRowPanel::handleRightMouseDown(S32 x, S32 y, MASK mask) +{ +	return mChiclet->handleRightMouseDown(x, y, mask); +} +  /************************************************************************/  /*         LLNotificationWellWindow implementation                      */  /************************************************************************/ diff --git a/indra/newview/llsyswellwindow.h b/indra/newview/llsyswellwindow.h index 833e4dd504..ded3abcbf4 100644 --- a/indra/newview/llsyswellwindow.h +++ b/indra/newview/llsyswellwindow.h @@ -217,6 +217,8 @@ private:  		void onMouseEnter(S32 x, S32 y, MASK mask);  		void onMouseLeave(S32 x, S32 y, MASK mask);  		BOOL handleMouseDown(S32 x, S32 y, MASK mask); +		BOOL handleRightMouseDown(S32 x, S32 y, MASK mask); +  	private:  		static const S32 CHICLET_HPAD = 10;  		void onChicletSizeChanged(LLChiclet* ctrl, const LLSD& param); @@ -245,6 +247,8 @@ private:  		/*virtual*/ void onMouseEnter(S32 x, S32 y, MASK mask);  		/*virtual*/ void onMouseLeave(S32 x, S32 y, MASK mask);  		/*virtual*/ BOOL handleMouseDown(S32 x, S32 y, MASK mask); +		/*virtual*/ BOOL handleRightMouseDown(S32 x, S32 y, MASK mask); +  	private:  		void onClosePanel();  		static EObjectType getObjectType(const LLNotificationPtr& notification); diff --git a/indra/newview/lltoast.cpp b/indra/newview/lltoast.cpp index 96d1624cd4..110d158e2d 100644 --- a/indra/newview/lltoast.cpp +++ b/indra/newview/lltoast.cpp @@ -266,6 +266,8 @@ void LLToast::onMouseEnter(S32 x, S32 y, MASK mask)  {  	mOnToastHoverSignal(this, MOUSE_ENTER); +	setBackgroundOpaque(TRUE); +  	//toasts fading is management by Screen Channel  	sendChildToFront(mHideBtn); diff --git a/indra/newview/llviewermessage.cpp b/indra/newview/llviewermessage.cpp index 6f9e551649..3362142807 100644 --- a/indra/newview/llviewermessage.cpp +++ b/indra/newview/llviewermessage.cpp @@ -2644,9 +2644,6 @@ void process_chat_from_simulator(LLMessageSystem *msg, void **user_data)  			LLNotificationsUI::LLNotificationManager::instance().onChat(  					chat, LLNotificationsUI::NT_NEARBYCHAT); -            // adding temporarily so that communications window chat bar  -            // works until the new chat window is ready -			chat.mText = from_name + ": " + chat.mText;  			LLFloaterChat::addChat(chat, FALSE, FALSE);  		}  		else diff --git a/indra/newview/llvoicechannel.cpp b/indra/newview/llvoicechannel.cpp index 18cdd23ed9..917d69fe16 100644 --- a/indra/newview/llvoicechannel.cpp +++ b/indra/newview/llvoicechannel.cpp @@ -278,10 +278,14 @@ void LLVoiceChannel::deactivate()  	if (callStarted())  	{  		setState(STATE_HUNG_UP); -		// mute the microphone if required when returning to the proximal channel -		if (gSavedSettings.getBOOL("AutoDisengageMic") && sCurrentVoiceChannel == this) +		 +		//Default mic is OFF when leaving voice calls +		if (gSavedSettings.getBOOL("AutoDisengageMic") &&  +			sCurrentVoiceChannel == this && +			gVoiceClient->getUserPTTState())  		{  			gSavedSettings.setBOOL("PTTCurrentlyEnabled", true); +			gVoiceClient->inputUserControlState(true);  		}  	} @@ -498,6 +502,13 @@ void LLVoiceChannelGroup::activate()  				LLRecentPeople::instance().add(buddy_id);  		}  #endif + +		//Mic default state is OFF on initiating/joining Ad-Hoc/Group calls +		if (gVoiceClient->getUserPTTState() && gVoiceClient->getPTTIsToggle()) +		{ +			gVoiceClient->inputUserControlState(true); +		} +		  	}  } @@ -811,6 +822,12 @@ void LLVoiceChannelP2P::activate()  		// Add the party to the list of people with which we've recently interacted.  		LLRecentPeople::instance().add(mOtherUserID); + +		//Default mic is ON on initiating/joining P2P calls +		if (!gVoiceClient->getUserPTTState() && gVoiceClient->getPTTIsToggle()) +		{ +			gVoiceClient->inputUserControlState(true); +		}  	}  } diff --git a/indra/newview/llvoiceclient.cpp b/indra/newview/llvoiceclient.cpp index c2d26a1971..423c46e14c 100644 --- a/indra/newview/llvoiceclient.cpp +++ b/indra/newview/llvoiceclient.cpp @@ -4445,7 +4445,7 @@ void LLVoiceClient::participantUpdatedEvent(  			participant->mVolume = volume; -			// *HACH: mantipov: added while working on EXT-3544 +			// *HACK: mantipov: added while working on EXT-3544  			/*  			Sometimes LLVoiceClient::participantUpdatedEvent callback is called BEFORE   			LLViewerChatterBoxSessionAgentListUpdates::post() sometimes AFTER. @@ -4462,7 +4462,9 @@ void LLVoiceClient::participantUpdatedEvent(  			in LLCallFloater::draw()  			*/  			LLVoiceChannel* voice_cnl = LLVoiceChannel::getCurrentVoiceChannel(); -			if (voice_cnl) + +			// ignore session ID of local chat +			if (voice_cnl && voice_cnl->getSessionID().notNull())  			{  				LLSpeakerMgr* speaker_manager = LLIMModel::getInstance()->getSpeakerManager(voice_cnl->getSessionID());  				if (speaker_manager) @@ -5883,6 +5885,10 @@ void LLVoiceClient::setPTTIsToggle(bool PTTIsToggle)  	mPTTIsToggle = PTTIsToggle;  } +bool LLVoiceClient::getPTTIsToggle() +{ +	return mPTTIsToggle; +}  void LLVoiceClient::setPTTKey(std::string &key)  { diff --git a/indra/newview/llvoiceclient.h b/indra/newview/llvoiceclient.h index 347fae6156..724179847d 100644 --- a/indra/newview/llvoiceclient.h +++ b/indra/newview/llvoiceclient.h @@ -193,6 +193,7 @@ static	void updatePosition(void);  		static bool voiceEnabled();  		void setUsePTT(bool usePTT);  		void setPTTIsToggle(bool PTTIsToggle); +		bool getPTTIsToggle();  		void setPTTKey(std::string &key);  		void setEarLocation(S32 loc);  		void setVoiceVolume(F32 volume); diff --git a/indra/newview/skins/default/xui/en/favorites_bar_button.xml b/indra/newview/skins/default/xui/en/favorites_bar_button.xml index 90105f92fd..dcf9847adb 100644 --- a/indra/newview/skins/default/xui/en/favorites_bar_button.xml +++ b/indra/newview/skins/default/xui/en/favorites_bar_button.xml @@ -23,8 +23,6 @@   pad_left="11"   pad_right="7"   tab_stop="false" - pad_right="10" - pad_left="10"    top="0"   use_ellipses="true"   width="140" /> diff --git a/indra/newview/skins/default/xui/en/floater_im_session.xml b/indra/newview/skins/default/xui/en/floater_im_session.xml index 57e92cdeec..243b63db00 100644 --- a/indra/newview/skins/default/xui/en/floater_im_session.xml +++ b/indra/newview/skins/default/xui/en/floater_im_session.xml @@ -14,8 +14,8 @@   visible="true"   width="360"   can_resize="true" - min_width="360" - min_height="350"> + min_width="250" + min_height="190">    <layout_stack    follows="all"    height="320" diff --git a/indra/newview/skins/default/xui/en/floater_voice_controls.xml b/indra/newview/skins/default/xui/en/floater_voice_controls.xml index 1fa613468f..a4ef807f06 100644 --- a/indra/newview/skins/default/xui/en/floater_voice_controls.xml +++ b/indra/newview/skins/default/xui/en/floater_voice_controls.xml @@ -30,7 +30,7 @@      </string>      <string       name="no_one_near"> -        No one near +        No one near has voice enabled      </string>      <string       name="max_visible_items"> diff --git a/indra/newview/skins/default/xui/en/menu_inspect_avatar_gear.xml b/indra/newview/skins/default/xui/en/menu_inspect_avatar_gear.xml index 01df208850..dde92f23b6 100644 --- a/indra/newview/skins/default/xui/en/menu_inspect_avatar_gear.xml +++ b/indra/newview/skins/default/xui/en/menu_inspect_avatar_gear.xml @@ -30,6 +30,8 @@     label="Call"     enabled="true"     name="call"> +    <menu_item_call.on_click +     function="InspectAvatar.Call"/>    </menu_item_call>    <menu_item_call     label="Teleport" diff --git a/indra/newview/skins/default/xui/en/menu_picks_plus.xml b/indra/newview/skins/default/xui/en/menu_picks_plus.xml index 3065239615..f3b207e36c 100644 --- a/indra/newview/skins/default/xui/en/menu_picks_plus.xml +++ b/indra/newview/skins/default/xui/en/menu_picks_plus.xml @@ -11,6 +11,9 @@          <menu_item_call.on_click            function="Picks.Plus.Action"            userdata="new_pick" /> +        <menu_item_call.on_enable +         function="Picks.Plus.Enable" +         userdata="new_pick" />          </menu_item_call>      <menu_item_call        name="create_classified"  diff --git a/indra/newview/skins/default/xui/en/notifications.xml b/indra/newview/skins/default/xui/en/notifications.xml index 95a7374e7b..6d5f0bedb0 100644 --- a/indra/newview/skins/default/xui/en/notifications.xml +++ b/indra/newview/skins/default/xui/en/notifications.xml @@ -5087,6 +5087,14 @@ An object named [OBJECTFROMNAME] owned by (an unknown Resident) has given you [O    <notification     icon="notify.tga" +   name="TeleportOfferSent" +   type="offer"> +	Teleport offer sent to [TO_NAME] +  </notification> + + +  <notification +   icon="notify.tga"     name="GotoURL"     type="notify">  [MESSAGE] diff --git a/indra/newview/skins/default/xui/en/panel_adhoc_control_panel.xml b/indra/newview/skins/default/xui/en/panel_adhoc_control_panel.xml index f3a2297151..6c54532a3a 100644 --- a/indra/newview/skins/default/xui/en/panel_adhoc_control_panel.xml +++ b/indra/newview/skins/default/xui/en/panel_adhoc_control_panel.xml @@ -5,56 +5,94 @@   height="215"   name="panel_im_control_panel"   width="180"> -    <avatar_list -     color="DkGray2" +    <layout_stack +     mouse_opaque="false" +     border_size="0" +     clip="false"       follows="all" -     height="130" -     ignore_online_status="true" +     height="215"       layout="topleft"       left="3" -     name="speakers_list" -     opaque="false" -     show_info_btn="false" -     show_profile_btn="false" -     show_speaking_indicator="false" -     top="10" -     width="180" /> -    <panel -     background_visible="true" -     bg_alpha_color="DkGray2" -     border="false" -     bottom="1" -     follows="left|right|bottom" -     height="70" -     left="0" -     left_pad="0" -     name="panel_call_buttons" -     top_pad="0" -     width="180"> -        <button -         bottom="10" -         follows="all" -         height="20" -         label="Call" -         left_delta="10" -         name="call_btn" -         width="160" /> -        <button -         bottom="40" -         follows="all" -         height="20" -         label="Leave Call" -         name="end_call_btn" -         visible="false" -          /> -        <button -         follows="all" -         bottom="10" -         height="20" -         label="Voice Controls" -         name="voice_ctrls_btn" -         use_ellipses="true"  -         visible="false" -          /> -    </panel> +     name="vertical_stack" +     orientation="vertical" +     top="0" +     width="177"> +        <layout_panel +         auto_resize="true" +         follows="top|left" +         height="130" +         layout="topleft" +         min_height="0" +         mouse_opaque="false" +         width="180" +         top="0" +         name="speakers_list_panel" +         user_resize="false"> +            <avatar_list +             color="DkGray2" +             follows="all" +             height="130" +             ignore_online_status="true" +             layout="topleft" +             name="speakers_list" +             opaque="false" +             show_info_btn="false" +             show_profile_btn="false" +             show_speaking_indicator="false" +             width="180" /> +        </layout_panel> +        <layout_panel +         auto_resize="false" +         follows="top|left|right" +         height="25" +         layout="topleft" +         min_height="25" +         width="160" +         name="call_btn_panel" +         user_resize="false" +         visible="false"> +            <button +             follows="all" +             height="20" +             label="Call" +             name="call_btn" +             width="160" +             top="5" /> +        </layout_panel> +        <layout_panel +         auto_resize="false" +         follows="top|left|right" +         height="25" +         layout="topleft" +         min_height="25" +         width="160" +         name="end_call_btn_panel" +         user_resize="false" +         visible="false"> +            <button +             follows="all" +             height="20" +             label="Leave Call" +             name="end_call_btn" +             top="5"/> +        </layout_panel> +        <layout_panel +         auto_resize="false" +         follows="top|left|right" +         height="25" +         layout="topleft" +         min_height="25" +         width="160" +         name="voice_ctrls_btn_panel" +         user_resize="false" +         visible="false"> +            <button +             follows="all" +             height="20" +             label="Voice Controls" +             name="voice_ctrls_btn" +             top="5" +             use_ellipses="true" /> +        </layout_panel> +    </layout_stack>  </panel> diff --git a/indra/newview/skins/default/xui/en/panel_group_control_panel.xml b/indra/newview/skins/default/xui/en/panel_group_control_panel.xml index 86b30ebfce..4073ef158b 100644 --- a/indra/newview/skins/default/xui/en/panel_group_control_panel.xml +++ b/indra/newview/skins/default/xui/en/panel_group_control_panel.xml @@ -5,66 +5,110 @@   height="238"   name="panel_im_control_panel"   width="180"> -    <avatar_list -     color="DkGray2" +    <layout_stack +     mouse_opaque="false" +     border_size="0" +     clip="false"       follows="all" -     height="100" -     ignore_online_status="true" +     height="238"       layout="topleft" -     left="3" -     name="speakers_list" -     opaque="false" -     show_info_btn="false" -     show_profile_btn="false" -     show_speaking_indicator="false" -     top="10" -     width="180" /> -    <button -     bottom_pad="0" -     follows="left|right|bottom" -     height="23" -     label="Group Profile" -     left_delta="10" -     name="group_info_btn" -     use_ellipses="true"  -     width="160" /> -    <panel -     background_visible="true" -     bg_alpha_color="DkGray2" -     border="false" -     follows="left|right|bottom" -     height="70" -     left="0" -     left_pad="0" -     name="panel_call_buttons" -     top_pad="0" -     width="180"> -        <button -         bottom="10" -         follows="all" -         height="23" -         label="Call Group" -         left_delta="10" -         name="call_btn" -         use_ellipses="true"  -         width="160" /> -        <button -         bottom="40" -         follows="all" -         height="23" -         label="Leave Call" -         name="end_call_btn" -         use_ellipses="true"  -         visible="false" -          /> -        <button -         bottom="10" -         follows="all" -         height="23" -         label="Open Voice Controls" -         name="voice_ctrls_btn" -         use_ellipses="true"  -         visible="false" -          /> -    </panel> +     left="5" +     name="vertical_stack" +     orientation="vertical" +     top="0" +     width="175"> +        <layout_panel +         auto_resize="true" +         follows="top|left" +         height="100" +         layout="topleft" +         min_height="0" +         mouse_opaque="false" +         width="180" +         top="0" +         name="speakers_list_panel" +         user_resize="false"> +            <avatar_list +             color="DkGray2" +             follows="all" +             height="100" +             ignore_online_status="true" +             layout="topleft" +             name="speakers_list" +             opaque="false" +             show_info_btn="false" +             show_profile_btn="false" +             show_speaking_indicator="false" +             width="180" /> +        </layout_panel> +        <layout_panel +         auto_resize="false" +         follows="top|left|right" +         height="28" +         layout="topleft" +         min_height="28" +         width="160" +         name="group_info_btn_panel" +         user_resize="false"> +            <button +             follows="left|right|bottom" +             height="23" +             label="Group Profile" +             name="group_info_btn" +             use_ellipses="true" +             top="5" +             width="160" /> +        </layout_panel> +        <layout_panel +         auto_resize="false" +         follows="top|left|right" +         height="28" +         layout="topleft" +         min_height="28" +         width="160" +         name="call_btn_panel" +         user_resize="false"> +            <button +             follows="all" +             height="23" +             label="Call Group" +             name="call_btn" +             use_ellipses="true"  +             width="160" /> +        </layout_panel> +        <layout_panel +         auto_resize="false" +         follows="top|left|right" +         height="28" +         layout="topleft" +         min_height="28" +         width="160" +         name="end_call_btn_panel" +         user_resize="false" +         visible="false"> +            <button +             follows="all" +             height="23" +             label="Leave Call" +             name="end_call_btn" +             use_ellipses="true" /> +        </layout_panel> +        <layout_panel +         auto_resize="false" +         follows="top|left|right" +         height="28" +         layout="topleft" +         min_height="28" +         width="160" +         name="voice_ctrls_btn_panel" +         user_resize="false" +         visible="false"> +            <button +             follows="all" +             height="23" +             label="Open Voice Controls" +             name="voice_ctrls_btn" +             use_ellipses="true" /> +        </layout_panel> +    </layout_stack>  </panel> diff --git a/indra/newview/skins/default/xui/en/panel_im_control_panel.xml b/indra/newview/skins/default/xui/en/panel_im_control_panel.xml index 30e652befd..2e3d5a7320 100644 --- a/indra/newview/skins/default/xui/en/panel_im_control_panel.xml +++ b/indra/newview/skins/default/xui/en/panel_im_control_panel.xml @@ -6,84 +6,161 @@   width="110">      <avatar_icon       follows="left|top" -     height="100" +     height="105"       left_delta="5"       name="avatar_icon"       top="-5" -     width="100"/> +     width="105"/>      <text       follows="top|left|right"       font="SansSerifLarge" -     height="22" +     height="19"       layout="topleft"       name="avatar_name"       use_ellipses="true"       value="Unknown" -     width="100" /> -    <button -     follows="left|top|right" -     height="20" -     label="Profile" -     name="view_profile_btn" -     width="100" /> -    <button -     follows="left|top|right" -     height="20" -     label="Add Friend" -     name="add_friend_btn" -     width="100" /> -    <button -     follows="left|top|right" -     height="20" -     label="Teleport" -     name="teleport_btn" -     width="100" /> -   <button -     follows="left|top|right" -     height="20" -     label="Share" -     name="share_btn" -     width="100" /> -     <!--Removing pay button to save space - will update spec - verified by Erica/Steve --> - <!--   <button -     follows="left|top|right" -     height="20" -     label="Pay" -     name="pay_btn" -     width="100" />--> -    <panel -     background_visible="true" -     bg_alpha_color="DkGray2" -     border="false" -     top_pad="10" -     follows="left|bottom|right" -     height="70" -     left="1" -     name="panel_call_buttons" -     width="109"> -        <button -         bottom="10" -         follows="left|top|right" -         height="20" -         label="Call" -         left_delta="5" -         name="call_btn" -         width="100" /> -        <button -         bottom="35" -         follows="left|top|right" +     width="110" /> +    <layout_stack +     mouse_opaque="false" +     border_size="0" +     clip="false" +     follows="all" +     height="168" +     layout="topleft" +     left="5" +     name="button_stack" +     orientation="vertical" +     top_pad="0" +     width="105"> +        <layout_panel +         mouse_opaque="false" +         auto_resize="true" +         follows="top|left" +         height="0" +         layout="topleft" +         left="2" +         min_height="0" +         width="100" +         top="0" +         name="spacer" +         user_resize="false" /> +        <layout_panel +         auto_resize="false" +         follows="top|left|right"           height="20" -         label="Leave Call" -         name="end_call_btn" -         visible="false" -         width="100" /> +         layout="topleft" +         min_height="20" +         width="100" +         name="view_profile_btn_panel" +         user_resize="false"> +            <button +             follows="left|top|right" +             height="20" +             label="Profile" +             name="view_profile_btn" +             top="0" +             width="100" /> +        </layout_panel> +        <layout_panel +         auto_resize="false" +         follows="top|left|right" +         height="25" +         layout="topleft" +         min_height="25" +         width="100" +         name="add_friend_btn_panel" +         user_resize="false"> +            <button +             follows="left|top|right" +             height="20" +             label="Add Friend" +             name="add_friend_btn" +             top="5" +             width="100" /> +        </layout_panel> +        <layout_panel +         auto_resize="false" +         follows="top|left|right" +         height="25" +         layout="topleft" +         min_height="25" +         width="100" +         name="teleport_btn_panel" +         user_resize="false">          <button -         bottom="10" -         follows="left|top|right" -         height="20" -         label="Voice Controls" -         name="voice_ctrls_btn" -         visible="false" -         width="100" /> -    </panel> +             auto_resize="false" +             follows="left|top|right" +             height="20" +             label="Teleport" +             name="teleport_btn" +             width="100" /> +        </layout_panel> +        <layout_panel +         auto_resize="false" +         follows="top|left|right" +         height="25" +         layout="topleft" +         min_height="25" +         width="100" +         name="share_btn_panel" +         user_resize="false"> +           <button +             auto_resize="true" +             follows="left|top|right" +             height="20" +             label="Share" +             name="share_btn" +             width="100" /> +        </layout_panel> +        <layout_panel +         auto_resize="false" +         follows="top|left|right" +         height="25" +         layout="topleft" +         min_height="25" +         width="100" +         name="call_btn_panel" +         user_resize="false"> +            <button +             follows="left|top|right" +             height="20" +             label="Call" +             name="call_btn" +             width="100" /> +        </layout_panel> +        <layout_panel +         auto_resize="false" +         follows="top|left|right" +         height="25" +         layout="topleft" +         min_height="25" +         width="100" +         name="end_call_btn_panel" +         user_resize="false" +         visible="false"> +            <button +             follows="left|top|right" +             height="20" +             label="Leave Call" +             name="end_call_btn" +             width="100" /> +        </layout_panel> +        <layout_panel +         auto_resize="false" +         follows="top|left|right" +         height="25" +         layout="topleft" +         min_height="25" +         width="100" +         name="voice_ctrls_btn_panel" +         user_resize="false" +         visible="false"> +            <button +             follows="left|top|right" +             height="20" +             label="Voice Controls" +             name="voice_ctrls_btn" +             width="100" /> +        </layout_panel> +    </layout_stack>  </panel> diff --git a/indra/newview/skins/default/xui/en/panel_instant_message.xml b/indra/newview/skins/default/xui/en/panel_instant_message.xml index ccd754ac5e..7204e57479 100644 --- a/indra/newview/skins/default/xui/en/panel_instant_message.xml +++ b/indra/newview/skins/default/xui/en/panel_instant_message.xml @@ -21,6 +21,7 @@       label="im_header"       layout="topleft"       left="5" +     mouse_opaque="false"       name="im_header"       top="5"       width="295"> @@ -30,7 +31,7 @@           image_name="Generic_Person"           layout="topleft"           left="3" -         mouse_opaque="true" +         mouse_opaque="false"           name="avatar_icon"           top="3"           width="18" /> | 
