diff options
| author | Oz Linden <oz@lindenlab.com> | 2013-03-21 10:57:38 -0400 | 
|---|---|---|
| committer | Oz Linden <oz@lindenlab.com> | 2013-03-21 10:57:38 -0400 | 
| commit | 50f199e45d0524b59fc9246a3160c5676c8d3942 (patch) | |
| tree | e091467d64f4334459b5ca67239ed23d4059392a /indra/newview | |
| parent | bf95c1cae7a84d1a97dacd8ea7f1b6af8be067a9 (diff) | |
| parent | 43d7c80e8e2cd1cfe4e6c4214b4a4df9341d310b (diff) | |
merge changes for 3.5.0-beta4
Diffstat (limited to 'indra/newview')
35 files changed, 612 insertions, 189 deletions
| diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml index e216c7865d..4c305e1d60 100644 --- a/indra/newview/app_settings/settings.xml +++ b/indra/newview/app_settings/settings.xml @@ -1716,17 +1716,6 @@        <key>Value</key>        <integer>131073</integer>      </map> -    <key>NearbyChatIsNotTornOff</key> -    <map> -      <key>Comment</key> -      <string>saving torn-off state of the nearby chat between sessions</string> -      <key>Persist</key> -      <integer>1</integer> -      <key>Type</key> -      <string>Boolean</string> -      <key>Value</key> -      <integer>1</integer> -    </map>      <key>CloseChatOnReturn</key>      <map>        <key>Comment</key> @@ -4282,6 +4271,17 @@        <key>Value</key>        <integer>1</integer>      </map> +     <key>IMShowContentPanel</key> +    <map> +      <key>Comment</key> +      <string>Show Toolbar and Body Panels</string> +      <key>Persist</key> +      <integer>1</integer> +      <key>Type</key> +      <string>Boolean</string> +      <key>Value</key> +      <integer>1</integer> +    </map>      <key>IgnoreAllNotifications</key>      <map>        <key>Comment</key> diff --git a/indra/newview/app_settings/settings_per_account.xml b/indra/newview/app_settings/settings_per_account.xml index 363713f2f4..ada374f892 100644 --- a/indra/newview/app_settings/settings_per_account.xml +++ b/indra/newview/app_settings/settings_per_account.xml @@ -281,6 +281,17 @@        	<key>Value</key>        		<integer>2</integer>      	</map>     +    <key>NearbyChatIsNotTornOff</key> +    <map> +      <key>Comment</key> +      <string>saving torn-off state of the nearby chat between sessions</string> +      <key>Persist</key> +      <integer>1</integer> +      <key>Type</key> +      <string>Boolean</string> +      <key>Value</key> +      <integer>1</integer> +    </map>      <key>ShowFavoritesOnLogin</key>          <map>          <key>Comment</key> diff --git a/indra/newview/llchiclet.cpp b/indra/newview/llchiclet.cpp index 3dbb43c657..b221daf936 100644 --- a/indra/newview/llchiclet.cpp +++ b/indra/newview/llchiclet.cpp @@ -427,6 +427,8 @@ LLChicletPanel::~LLChicletPanel()  void LLChicletPanel::onMessageCountChanged(const LLSD& data)  { +    // *TODO : we either suppress this method or return a value. Right now, it servers no purpose. +    /*  	LLUUID session_id = data["session_id"].asUUID();  	S32 unread = data["participant_unread"].asInteger(); @@ -435,6 +437,7 @@ void LLChicletPanel::onMessageCountChanged(const LLSD& data)  	{  		unread = 0;  	} +    */  }  void LLChicletPanel::objectChicletCallback(const LLSD& data) diff --git a/indra/newview/llconversationlog.cpp b/indra/newview/llconversationlog.cpp index dd20ca15ae..7883e4cb89 100644 --- a/indra/newview/llconversationlog.cpp +++ b/indra/newview/llconversationlog.cpp @@ -194,14 +194,17 @@ LLConversationLog::LLConversationLog() :  	mAvatarNameCacheConnection(),  	mLoggingEnabled(false)  { -	LLControlVariable * keep_log_ctrlp = gSavedPerAccountSettings.getControl("KeepConversationLogTranscripts").get(); -	S32 log_mode = keep_log_ctrlp->getValue(); -	keep_log_ctrlp->getSignal()->connect(boost::bind(&LLConversationLog::enableLogging, this, _2)); -	if (log_mode > 0) +	if(gSavedPerAccountSettings.controlExists("KeepConversationLogTranscripts"))  	{ -		loadFromFile(getFileName()); +		LLControlVariable * keep_log_ctrlp = gSavedPerAccountSettings.getControl("KeepConversationLogTranscripts").get(); +		S32 log_mode = keep_log_ctrlp->getValue(); +		keep_log_ctrlp->getSignal()->connect(boost::bind(&LLConversationLog::enableLogging, this, _2)); +		if (log_mode > 0) +		{ +			loadFromFile(getFileName()); -		enableLogging(log_mode); +			enableLogging(log_mode); +		}  	}  } diff --git a/indra/newview/llconversationloglist.cpp b/indra/newview/llconversationloglist.cpp index b202cfc9d3..5ab108b39f 100644 --- a/indra/newview/llconversationloglist.cpp +++ b/indra/newview/llconversationloglist.cpp @@ -390,7 +390,7 @@ bool LLConversationLogList::isActionEnabled(const LLSD& userdata)  	{  		return is_p2p && LLAvatarActions::canOfferTeleport(selected_id);  	} -	else if ("can_show_on_map") +	else if ("can_show_on_map" == command_name)  	{  		return is_p2p && ((LLAvatarTracker::instance().isBuddyOnline(selected_id) && is_agent_mappable(selected_id)) || gAgent.isGodlike());  	} diff --git a/indra/newview/llconversationmodel.cpp b/indra/newview/llconversationmodel.cpp index 009fce0a92..c74ce24872 100644 --- a/indra/newview/llconversationmodel.cpp +++ b/indra/newview/llconversationmodel.cpp @@ -139,6 +139,8 @@ void LLConversationItem::buildParticipantMenuOptions(menuentry_vec_t& items, U32  		items.push_back(std::string("remove_friend"));  		items.push_back(std::string("invite_to_group"));  		items.push_back(std::string("separator_invite_to_group")); +		if (static_cast<LLConversationItem*>(mParent)->getType() == CONV_SESSION_NEARBY) +			items.push_back(std::string("zoom_in"));  		items.push_back(std::string("map"));  		items.push_back(std::string("share"));  		items.push_back(std::string("pay")); diff --git a/indra/newview/lldelayedgestureerror.cpp b/indra/newview/lldelayedgestureerror.cpp index 80e7c9f1b2..ef1b644ad4 100644 --- a/indra/newview/lldelayedgestureerror.cpp +++ b/indra/newview/lldelayedgestureerror.cpp @@ -113,9 +113,11 @@ bool LLDelayedGestureError::doDialog(const LLErrorEntry &ent, bool uuid_ok)  		}  	} - -	LLNotificationsUtil::add(ent.mNotifyName, args); - +	if(!LLApp::isQuitting()) +	{ +		LLNotificationsUtil::add(ent.mNotifyName, args); +	} +	  	return true;  } diff --git a/indra/newview/lldonotdisturbnotificationstorage.cpp b/indra/newview/lldonotdisturbnotificationstorage.cpp index 22f35752bd..be20adeb8a 100644 --- a/indra/newview/lldonotdisturbnotificationstorage.cpp +++ b/indra/newview/lldonotdisturbnotificationstorage.cpp @@ -33,6 +33,7 @@  #include "lldir.h"  #include "llerror.h"  #include "llfloaterreg.h" +#include "llimview.h"  #include "llnotifications.h"  #include "llnotificationhandler.h"  #include "llnotificationstorage.h" @@ -145,6 +146,8 @@ void LLDoNotDisturbNotificationStorage::loadNotifications()  	LLNotifications& instance = LLNotifications::instance();      bool imToastExists = false; +	bool group_ad_hoc_toast_exists = false; +	S32 toastSessionType;      bool offerExists = false;  	for (LLSD::array_const_iterator notification_it = data.beginArray(); @@ -158,7 +161,20 @@ void LLDoNotDisturbNotificationStorage::loadNotifications()          if(notificationName == toastName)          { -            imToastExists = true; +			toastSessionType = notification_params["payload"]["SESSION_TYPE"]; +			if(toastSessionType == LLIMModel::LLIMSession::P2P_SESSION) +			{ +				imToastExists = true; +			} +			//Don't add group/ad-hoc messages to the notification system because +			//this means the group/ad-hoc session has to be re-created +			else if(toastSessionType == LLIMModel::LLIMSession::GROUP_SESSION  +					|| toastSessionType == LLIMModel::LLIMSession::ADHOC_SESSION) +			{ +				//Just allows opening the conversation log for group/ad-hoc messages upon startup +				group_ad_hoc_toast_exists = true; +				continue; +			}          }          else if(notificationName == offerName)          { @@ -197,7 +213,12 @@ void LLDoNotDisturbNotificationStorage::loadNotifications()          LLFloaterReg::showInstance("im_container");      } -    if(imToastExists || offerExists) +	if(group_ad_hoc_toast_exists) +	{ +		LLFloaterReg::showInstance("conversation"); +	} + +    if(imToastExists || group_ad_hoc_toast_exists || offerExists)      {  		make_ui_sound_deferred("UISndNewIncomingIMSession");      } diff --git a/indra/newview/llfloaterimcontainer.cpp b/indra/newview/llfloaterimcontainer.cpp index 7437dd8cda..5e0cd8ef78 100644 --- a/indra/newview/llfloaterimcontainer.cpp +++ b/indra/newview/llfloaterimcontainer.cpp @@ -53,6 +53,7 @@  #include "llcallbacklist.h"  #include "llworld.h"  #include "llsdserialize.h" +#include "llviewerobjectlist.h"  //  // LLFloaterIMContainer @@ -62,8 +63,7 @@ LLFloaterIMContainer::LLFloaterIMContainer(const LLSD& seed, const Params& param  	mExpandCollapseBtn(NULL),  	mConversationsRoot(NULL),  	mConversationsEventStream("ConversationsEvents"), -	mInitialized(false), -	mIsFirstLaunch(false) +	mInitialized(false)  {      mEnableCallbackRegistrar.add("IMFloaterContainer.Check", boost::bind(&LLFloaterIMContainer::isActionChecked, this, _2));  	mCommitCallbackRegistrar.add("IMFloaterContainer.Action", boost::bind(&LLFloaterIMContainer::onCustomAction,  this, _2)); @@ -245,7 +245,6 @@ BOOL LLFloaterIMContainer::postBuild()  	mGeneralTitle = getTitle();  	mInitialized = true; -	mIsFirstLaunch = true;  	// Add callbacks:  	// We'll take care of view updates on idle @@ -280,12 +279,6 @@ void LLFloaterIMContainer::addFloater(LLFloater* floaterp,  	LLUUID session_id = floaterp->getKey(); -	// Make sure the message panel is open when adding a floater or it stays mysteriously hidden -	if (!mIsFirstLaunch) -	{ -		collapseMessagesPane(false); -	} -  	// Add the floater  	LLMultiFloater::addFloater(floaterp, select_added_floater, insertion_point); @@ -646,8 +639,6 @@ void LLFloaterIMContainer::collapseMessagesPane(bool collapse)  		return;  	} -	mIsFirstLaunch = false; -  	// Save current width of panels before collapsing/expanding right pane.  	S32 conv_pane_width = mConversationsPane->getRect().getWidth();      S32 msg_pane_width = mMessagesPane->getRect().getWidth(); @@ -1036,6 +1027,10 @@ void LLFloaterIMContainer::doToParticipants(const std::string& command, uuid_vec  		{  			LLAvatarActions::inviteToGroup(userID);  		} +		else if ("zoom_in" == command) +		{ +			handle_zoom_to_object(userID); +		}  		else if ("map" == command)  		{  			LLAvatarActions::showOnMap(userID); @@ -1257,6 +1252,10 @@ bool LLFloaterIMContainer::enableContextMenuItem(const std::string& item, uuid_v      {          return LLAvatarActions::canCall();      } +	else if ("can_zoom_in" == item) +	{ +		return is_single_select && gObjectList.findObject(single_id); +	}      else if ("can_show_on_map" == item)      {          return (is_single_select ? (LLAvatarTracker::instance().isBuddyOnline(single_id) && is_agent_mappable(single_id)) || gAgent.isGodlike() : false); @@ -1330,6 +1329,9 @@ void LLFloaterIMContainer::showConversation(const LLUUID& session_id)  {      setVisibleAndFrontmost(false);      selectConversationPair(session_id, true); + +    LLFloaterIMSessionTab* session_floater = LLFloaterIMSessionTab::findConversation(session_id); +    session_floater->restoreFloater();  }  void LLFloaterIMContainer::clearAllFlashStates() @@ -1419,7 +1421,7 @@ BOOL LLFloaterIMContainer::selectConversationPair(const LLUUID& session_id, bool  			session_floater->setMinimized(is_minimized);  		}  	} - +	flashConversationItemWidget(session_id,false);      return handled;  } diff --git a/indra/newview/llfloaterimcontainer.h b/indra/newview/llfloaterimcontainer.h index 5139651d8d..2cbc1e99f9 100644 --- a/indra/newview/llfloaterimcontainer.h +++ b/indra/newview/llfloaterimcontainer.h @@ -174,7 +174,6 @@ private:  	LLLayoutStack* mConversationsStack;  	bool mInitialized; -	bool mIsFirstLaunch;  	LLUUID mSelectedSession;  	std::string mGeneralTitle; diff --git a/indra/newview/llfloaterimnearbychat.cpp b/indra/newview/llfloaterimnearbychat.cpp index cfee5001a6..b287950c21 100644 --- a/indra/newview/llfloaterimnearbychat.cpp +++ b/indra/newview/llfloaterimnearbychat.cpp @@ -274,8 +274,8 @@ void LLFloaterIMNearbyChat::onTearOffClicked()  	LLFloaterIMSessionTab::onTearOffClicked();  	// see CHUI-170: Save torn-off state of the nearby chat between sessions -	BOOL in_the_multifloater = !isTornOff(); -	gSavedSettings.setBOOL("NearbyChatIsNotTornOff", in_the_multifloater); +	BOOL in_the_multifloater = (BOOL)getHost(); +	gSavedPerAccountSettings.setBOOL("NearbyChatIsNotTornOff", in_the_multifloater);  } @@ -290,6 +290,7 @@ void LLFloaterIMNearbyChat::onOpen(const LLSD& key)  void LLFloaterIMNearbyChat::onClose(bool app_quitting)  {  	// Override LLFloaterIMSessionTab::onClose() so that Nearby Chat is not removed from the conversation floater +	LLFloaterIMSessionTab::restoreFloater();  	onClickCloseBtn();  } @@ -297,8 +298,10 @@ void LLFloaterIMNearbyChat::onClose(bool app_quitting)  void LLFloaterIMNearbyChat::onClickCloseBtn()  {  	if (!isTornOff()) +	{  		return; -	onTearOffClicked(); +	} +	LLFloaterIMSessionTab::onTearOffClicked();  	LLFloaterIMContainer *im_box = LLFloaterIMContainer::findInstance();  	if (im_box) @@ -334,7 +337,7 @@ bool LLFloaterIMNearbyChat::isChatVisible() const  	if (im_box != NULL)  	{  		isVisible = -				isChatMultiTab() && gSavedSettings.getBOOL("NearbyChatIsNotTornOff")? +				isChatMultiTab() && gSavedPerAccountSettings.getBOOL("NearbyChatIsNotTornOff")?  						im_box->getVisible() && !im_box->isMinimized() :  						getVisible() && !isMinimized();  	} @@ -345,6 +348,11 @@ bool LLFloaterIMNearbyChat::isChatVisible() const  void LLFloaterIMNearbyChat::showHistory()  {  	openFloater(); +	if(!isMessagePaneExpanded()) +	{ +		restoreFloater(); +		setFocus(true); +	}  	setResizeLimits(getMinWidth(), EXPANDED_MIN_HEIGHT);  } @@ -417,6 +425,12 @@ BOOL LLFloaterIMNearbyChat::matchChatTypeTrigger(const std::string& in_str, std:  void LLFloaterIMNearbyChat::onChatBoxKeystroke()  { +	LLFloaterIMContainer* im_box = LLFloaterIMContainer::findInstance(); +	if (im_box) +	{ +		im_box->flashConversationItemWidget(mSessionID,false); +	} +  	LLFirstUse::otherAvatarChatFirst(false);  	LLWString raw_text = mInputEditor->getWText(); @@ -725,7 +739,14 @@ void LLFloaterIMNearbyChat::startChat(const char* line)  	LLFloaterIMNearbyChat* nearby_chat = LLFloaterReg::getTypedInstance<LLFloaterIMNearbyChat>("nearby_chat");  	if (nearby_chat)  	{ -		nearby_chat->show(); +		if(!nearby_chat->isTornOff()) +		{ +			nearby_chat->show(); +		} +		if(nearby_chat->isMinimized()) +		{ +			nearby_chat->setMinimized(false); +		}  		nearby_chat->setVisible(TRUE);  		nearby_chat->setFocus(TRUE);  		nearby_chat->mInputEditor->setFocus(TRUE); diff --git a/indra/newview/llfloaterimnearbychathandler.cpp b/indra/newview/llfloaterimnearbychathandler.cpp index 8870d54cd2..7afcf288ce 100644 --- a/indra/newview/llfloaterimnearbychathandler.cpp +++ b/indra/newview/llfloaterimnearbychathandler.cpp @@ -559,12 +559,14 @@ void LLFloaterIMNearbyChatHandler::processChat(const LLChat& chat_msg,      LLFloaterIMContainer* im_box = LLFloaterReg::getTypedInstance<LLFloaterIMContainer>("im_container"); -	if( nearby_chat->hasFocus()  +	if(( nearby_chat->hasFocus()          || im_box->hasFocus()  		|| ( chat_msg.mSourceType == CHAT_SOURCE_AGENT  			&& gSavedSettings.getBOOL("UseChatBubbles") )  		|| mChannel.isDead() -		|| !mChannel.get()->getShowToasts() ) // to prevent toasts in Do Not Disturb mode +		|| !mChannel.get()->getShowToasts() ) +		&& nearby_chat->isMessagePaneExpanded()) +		// to prevent toasts in Do Not Disturb mode  		return;//no need in toast if chat is visible or if bubble chat is enabled  	// arrange a channel on a screen @@ -606,7 +608,7 @@ void LLFloaterIMNearbyChatHandler::processChat(const LLChat& chat_msg,  		//Don't show nearby toast, if conversation is visible but not focused  		LLFloaterIMSessionTab* session_floater = LLFloaterIMSessionTab::getConversation(LLUUID()); -		if (session_floater +		if (session_floater && session_floater->isMessagePaneExpanded()  		    && session_floater->isInVisibleChain() && !session_floater->isMinimized()  		    && !(session_floater->getHost() && session_floater->getHost()->isMinimized()))  		{ @@ -614,7 +616,7 @@ void LLFloaterIMNearbyChatHandler::processChat(const LLChat& chat_msg,  		}          //Will show toast when chat preference is set         -        if(gSavedSettings.getString("NotificationNearbyChatOptions") == "toast") +        if((gSavedSettings.getString("NotificationNearbyChatOptions") == "toast") || !session_floater->isMessagePaneExpanded())          {              // Add a nearby chat toast.              LLUUID id; diff --git a/indra/newview/llfloaterimsession.cpp b/indra/newview/llfloaterimsession.cpp index 50b2ed8c51..73adfd0eda 100644 --- a/indra/newview/llfloaterimsession.cpp +++ b/indra/newview/llfloaterimsession.cpp @@ -618,7 +618,7 @@ void LLFloaterIMSession::onClose(bool app_quitting)  	// Last change:  	// EXT-3516 X Button should end IM session, _ button should hide  	gIMMgr->leaveSession(mSessionID); - +	LLFloaterIMSessionTab::restoreFloater();  	// Clean up the conversation *after* the session has been ended  	LLFloaterIMSessionTab::onClose(app_quitting);  } @@ -892,6 +892,11 @@ void LLFloaterIMSession::onInputEditorFocusLost(LLFocusableElement* caller, void  void LLFloaterIMSession::onInputEditorKeystroke(LLTextEditor* caller, void* userdata)  {  	LLFloaterIMSession* self = (LLFloaterIMSession*)userdata; +	LLFloaterIMContainer* im_box = LLFloaterIMContainer::findInstance(); +	if (im_box) +	{ +		im_box->flashConversationItemWidget(self->mSessionID,false); +	}  	std::string text = self->mInputEditor->getText();  		// Deleting all text counts as stopping typing. diff --git a/indra/newview/llfloaterimsessiontab.cpp b/indra/newview/llfloaterimsessiontab.cpp index 9fd22b1537..5df1a382cd 100644 --- a/indra/newview/llfloaterimsessiontab.cpp +++ b/indra/newview/llfloaterimsessiontab.cpp @@ -170,7 +170,7 @@ void LLFloaterIMSessionTab::addToHost(const LLUUID& session_id)  			conversp->setHostAttached(true);  			if (!conversp->isNearbyChat() -					|| gSavedSettings.getBOOL("NearbyChatIsNotTornOff")) +					|| gSavedPerAccountSettings.getBOOL("NearbyChatIsNotTornOff"))  			{  				floater_container->addFloater(conversp, false, LLTabContainer::RIGHT_OF_CURRENT);  			} @@ -194,19 +194,28 @@ BOOL LLFloaterIMSessionTab::postBuild()  {  	BOOL result; +	mBodyStack = getChild<LLLayoutStack>("main_stack"); + +  	mCloseBtn = getChild<LLButton>("close_btn");  	mCloseBtn->setCommitCallback(boost::bind(&LLFloater::onClickClose, this));  	mExpandCollapseBtn = getChild<LLButton>("expand_collapse_btn");  	mExpandCollapseBtn->setClickedCallback(boost::bind(&LLFloaterIMSessionTab::onSlide, this)); +	mExpandCollapseLineBtn = getChild<LLButton>("minz_btn"); +	mExpandCollapseLineBtn->setClickedCallback(boost::bind(&LLFloaterIMSessionTab::onCollapseToLine, this)); +  	mTearOffBtn = getChild<LLButton>("tear_off_btn");  	mTearOffBtn->setCommitCallback(boost::bind(&LLFloaterIMSessionTab::onTearOffClicked, this));  	mGearBtn = getChild<LLButton>("gear_btn");  	mParticipantListPanel = getChild<LLLayoutPanel>("speakers_list_panel"); -	 +	mToolbarPanel = getChild<LLLayoutPanel>("toolbar_panel"); +	mContentPanel = getChild<LLLayoutPanel>("body_panel"); +	mInputButtonPanel = getChild<LLLayoutPanel>("input_button_layout_panel"); +	mInputButtonPanel->setVisible(false);  	// Add a scroller for the folder (participant) view  	LLRect scroller_view_rect = mParticipantListPanel->getRect();  	scroller_view_rect.translate(-scroller_view_rect.mLeft, -scroller_view_rect.mBottom); @@ -233,7 +242,7 @@ BOOL LLFloaterIMSessionTab::postBuild()  	setOpenPositioning(LLFloaterEnums::POSITIONING_RELATIVE);  	mSaveRect = isNearbyChat() -					&&  !gSavedSettings.getBOOL("NearbyChatIsNotTornOff"); +					&&  !gSavedPerAccountSettings.getBOOL("NearbyChatIsNotTornOff");  	initRectControl();  	if (isChatMultiTab()) @@ -264,6 +273,8 @@ BOOL LLFloaterIMSessionTab::postBuild()  	mConversationsRoot->setFollowsAll();  	mConversationsRoot->addChild(mConversationsRoot->mStatusTextBox); +	setMessagePaneExpanded(true); +  	buildConversationViewParticipant();  	refreshConversation(); @@ -651,6 +662,7 @@ void LLFloaterIMSessionTab::updateHeaderAndToolbar()  	mParticipantListPanel->setVisible(is_participant_list_visible); +  	// Display collapse image (<<) if the floater is hosted  	// or if it is torn off but has an open control panel.  	bool is_expanded = is_not_torn_off || is_participant_list_visible; @@ -674,6 +686,7 @@ void LLFloaterIMSessionTab::updateHeaderAndToolbar()  	mTearOffBtn->setImageOverlay(getString(is_not_torn_off? "tear_off_icon" : "return_icon"));  	mTearOffBtn->setToolTip(getString(is_not_torn_off? "tooltip_to_separate_window" : "tooltip_to_main_window")); +  	mCloseBtn->setVisible(is_not_torn_off && !mIsNearbyChat);  	enableDisableCallBtn(); @@ -784,6 +797,63 @@ void LLFloaterIMSessionTab::onSlide(LLFloaterIMSessionTab* self)  	}  } +void LLFloaterIMSessionTab::onCollapseToLine(LLFloaterIMSessionTab* self) +{ +	LLFloaterIMContainer* host_floater = dynamic_cast<LLFloaterIMContainer*>(self->getHost()); +	if (!host_floater) +	{ +		bool expand = self->isMessagePaneExpanded(); +		self->mExpandCollapseLineBtn->setImageOverlay(self->getString(expand ? "collapseline_icon" : "expandline_icon")); +		self->mContentPanel->setVisible(!expand); +		self->mToolbarPanel->setVisible(!expand); +		self->reshapeFloater(expand); +		self->setMessagePaneExpanded(!expand); +	} +} + +void LLFloaterIMSessionTab::reshapeFloater(bool collapse) +{ +	LLRect floater_rect = getRect(); + +	if(collapse) +	{ +		mFloaterHeight = floater_rect.getHeight(); +		S32 height = mContentPanel->getRect().getHeight() + mToolbarPanel->getRect().getHeight(); +		floater_rect.mTop -= height; +		enableResizeCtrls(true, true, false); +	} +	else +	{ +		floater_rect.mTop = floater_rect.mBottom + mFloaterHeight; +		enableResizeCtrls(true, true, true); + +	} + +	setShape(floater_rect, true); +	mBodyStack->updateLayout(); + +} + +void LLFloaterIMSessionTab::restoreFloater() +{ +	if(!isMessagePaneExpanded()) +	{ +		if(isMinimized()) +		{ +			setMinimized(false); +		} +		mContentPanel->setVisible(true); +		mToolbarPanel->setVisible(true); +		LLRect floater_rect = getRect(); +		floater_rect.mTop = floater_rect.mBottom + mFloaterHeight; +		setShape(floater_rect, true); +		mBodyStack->updateLayout(); +		mExpandCollapseLineBtn->setImageOverlay(getString("expandline_icon")); +		setMessagePaneExpanded(true); +		enableResizeCtrls(true, true, true); +	} +} +  /*virtual*/  void LLFloaterIMSessionTab::onOpen(const LLSD& key)  { @@ -793,12 +863,15 @@ void LLFloaterIMSessionTab::onOpen(const LLSD& key)  		// Show the messages pane when opening a floater hosted in the Conversations  		host_floater->collapseMessagesPane(false);  	} + +	mInputButtonPanel->setVisible(isTornOff());  }  void LLFloaterIMSessionTab::onTearOffClicked()  { -    setFollows(isTornOff()? FOLLOWS_ALL : FOLLOWS_NONE); +	restoreFloater(); +	setFollows(isTornOff()? FOLLOWS_ALL : FOLLOWS_NONE);      mSaveRect = isTornOff();      initRectControl();  	LLFloater::onClickTearOff(this); @@ -813,7 +886,10 @@ void LLFloaterIMSessionTab::onTearOffClicked()  	else  	{  		container->selectConversation(mSessionID); +  	} +	mInputButtonPanel->setVisible(isTornOff()); +  	refreshConversation();  	updateGearBtn();  } diff --git a/indra/newview/llfloaterimsessiontab.h b/indra/newview/llfloaterimsessiontab.h index e8ae557412..f22e2b5744 100644 --- a/indra/newview/llfloaterimsessiontab.h +++ b/indra/newview/llfloaterimsessiontab.h @@ -98,6 +98,9 @@ public:  	LLConversationItem* getCurSelectedViewModelItem();  	void forceReshape();  	virtual BOOL handleKeyHere( KEY key, MASK mask ); +	bool isMessagePaneExpanded(){return mMessagePaneExpanded;} +	void setMessagePaneExpanded(bool expanded){mMessagePaneExpanded = expanded;} +	void restoreFloater();  protected: @@ -111,6 +114,8 @@ protected:  	bool onIMShowModesMenuItemCheck(const LLSD& userdata);  	bool onIMShowModesMenuItemEnable(const LLSD& userdata);  	static void onSlide(LLFloaterIMSessionTab *self); +	static void onCollapseToLine(LLFloaterIMSessionTab *self); +	void reshapeFloater(bool collapse);  	// refresh a visual state of the Call button  	void updateCallBtnState(bool callIsActive); @@ -138,15 +143,22 @@ protected:  	bool mIsNearbyChat;  	bool mIsP2PChat; + +	bool mMessagePaneExpanded;  	bool mIsParticipantListExpanded; +  	LLIMModel::LLIMSession* mSession;  	// Participants list: model and view  	LLConversationViewParticipant* createConversationViewParticipant(LLConversationItem* item);  	LLUUID mSessionID;  +	LLLayoutStack* mBodyStack;  	LLLayoutPanel* mParticipantListPanel;	// add the widgets to that see mConversationsListPanel +	LLLayoutPanel* mContentPanel; +	LLLayoutPanel* mToolbarPanel; +	LLLayoutPanel* mInputButtonPanel;  	LLParticipantList* getParticipantList();  	conversations_widgets_map mConversationsWidgets;  	LLConversationViewModel mConversationViewModel; @@ -158,11 +170,14 @@ protected:  	LLChatEntry* mInputEditor;  	int mInputEditorTopPad; // padding between input field and chat history +	LLButton* mExpandCollapseLineBtn;  	LLButton* mExpandCollapseBtn;  	LLButton* mTearOffBtn;  	LLButton* mCloseBtn;  	LLButton* mGearBtn; +	S32 mFloaterHeight; +  private:  	// Handling selection and contextual menu diff --git a/indra/newview/llfloaterpreference.cpp b/indra/newview/llfloaterpreference.cpp index b308a820b2..a28af2101b 100755 --- a/indra/newview/llfloaterpreference.cpp +++ b/indra/newview/llfloaterpreference.cpp @@ -443,6 +443,8 @@ BOOL LLFloaterPreference::postBuild()  	std::string cache_location = gDirUtilp->getExpandedFilename(LL_PATH_CACHE, "");  	setCacheLocation(cache_location); +	getChild<LLUICtrl>("log_path_string")->setEnabled(FALSE); // make it read-only but selectable +  	getChild<LLComboBox>("language_combobox")->setCommitCallback(boost::bind(&LLFloaterPreference::onLanguageChange, this));  	getChild<LLComboBox>("FriendIMOptions")->setCommitCallback(boost::bind(&LLFloaterPreference::onNotificationsChange, this,"FriendIMOptions")); @@ -1572,7 +1574,6 @@ void LLFloaterPreference::setPersonalInfo(const std::string& visibility, bool im  	getChildView("send_im_to_email")->setEnabled(TRUE);  	getChild<LLUICtrl>("send_im_to_email")->setValue(im_via_email);  	getChildView("favorites_on_login_check")->setEnabled(TRUE); -	getChildView("log_path_string")->setEnabled(FALSE);// LineEditor becomes readonly in this case.  	getChildView("log_path_button")->setEnabled(TRUE);  	getChildView("chat_font_size")->setEnabled(TRUE);  } diff --git a/indra/newview/llimview.cpp b/indra/newview/llimview.cpp index 37f5888e8c..8c862548bb 100644 --- a/indra/newview/llimview.cpp +++ b/indra/newview/llimview.cpp @@ -154,6 +154,7 @@ static void on_avatar_name_cache_toast(const LLUUID& agent_id,  	args["FROM"] = av_name.getCompleteName();  	args["FROM_ID"] = msg["from_id"];  	args["SESSION_ID"] = msg["session_id"]; +	args["SESSION_TYPE"] = msg["session_type"];  	LLNotificationsUtil::add("IMToast", args, args, boost::bind(&LLFloaterIMContainer::showConversation, LLFloaterIMContainer::getInstance(), msg["session_id"].asUUID()));  } @@ -199,13 +200,13 @@ void on_new_message(const LLSD& msg)      // execution of the action      LLFloaterIMContainer* im_box = LLFloaterReg::getTypedInstance<LLFloaterIMContainer>("im_container"); - -	if (im_box->isFrontmost() && im_box->getSelectedSession() == session_id) +	LLFloaterIMSessionTab* session_floater = LLFloaterIMSessionTab::getConversation(session_id); +	 +	if (im_box->isFrontmost() && im_box->getSelectedSession() == session_id +		&& !(session_floater->getHost() ? im_box->isMinimized() : session_floater->isMinimized()))  	{  		return;  	} - -	LLFloaterIMSessionTab* session_floater = LLFloaterIMSessionTab::getConversation(session_id);      //session floater not focused (visible or not)      bool session_floater_not_focused = session_floater && !session_floater->hasFocus(); @@ -226,17 +227,18 @@ void on_new_message(const LLSD& msg)              && !session_floater->isMinimized()              && !(session_floater->getHost() && session_floater->getHost()->isMinimized()); -    if ("toast" == action && !session_floater_is_open) +    bool conversation_floater_collapsed = !session_floater->isMessagePaneExpanded(); +    if (("toast" == action && !session_floater_is_open) || conversation_floater_collapsed)      {          //User is not focused on conversation containing the message -        if(session_floater_not_focused) +        if(session_floater_not_focused || conversation_floater_collapsed)          {          	if(!LLMuteList::getInstance()->isMuted(participant_id))          	{          		im_box->flashConversationItemWidget(session_id, true);          	}              //The conversation floater isn't focused/open -            if(conversation_floater_not_focused) +            if(conversation_floater_not_focused || conversation_floater_collapsed)              {              	if(!LLMuteList::getInstance()->isMuted(participant_id)                       && !gAgent.isDoNotDisturb()) @@ -285,10 +287,23 @@ void on_new_message(const LLSD& msg)              {  				//Surface conversations floater  				LLFloaterReg::showInstance("im_container"); - -				if (session_floater && session_floater->isMinimized()) +				im_box->collapseMessagesPane(false); +				if (session_floater)  				{ -					LLFloater::onClickMinimize(session_floater); +					if (session_floater->getHost()) +					{ +						if (NULL != im_box && im_box->isMinimized()) +						{ +							LLFloater::onClickMinimize(im_box); +						} +					} +					else +					{ +						if (session_floater->isMinimized()) +						{ +							LLFloater::onClickMinimize(session_floater); +						} +					}  				}  			} @@ -641,8 +656,7 @@ void LLIMModel::LLIMSession::loadHistory()  LLIMModel::LLIMSession* LLIMModel::findIMSession(const LLUUID& session_id) const  { -	return get_if_there(mId2SessionMap, session_id, -		(LLIMModel::LLIMSession*) NULL); +	return get_if_there(mId2SessionMap, session_id, (LLIMModel::LLIMSession*) NULL);  }  //*TODO consider switching to using std::set instead of std::list for holding LLUUIDs across the whole code @@ -995,6 +1009,7 @@ bool LLIMModel::addMessage(const LLUUID& session_id, const std::string& from, co  	arg["from"] = from;  	arg["from_id"] = from_id;  	arg["time"] = LLLogChat::timestamp(false); +	arg["session_type"] = session->mSessionType;  	mNewMsgSignal(arg);  	return true; @@ -2638,7 +2653,7 @@ void LLIMMgr::addMessage(  	if (gSavedSettings.getBOOL("VoiceCallsFriendsOnly"))  	{  		// Evaluate if we need to skip this message when that setting is true (default is false) -		LLIMModel::LLIMSession* session = LLIMModel::instance().findIMSession(session_id); +		LLIMModel::LLIMSession* session = LLIMModel::instance().findIMSession(new_session_id);  		skip_message = (LLAvatarTracker::instance().getBuddyInfo(other_participant_id) == NULL);	// Skip non friends...  		skip_message &= !session->isGroupSessionType();			// Do not skip group chats...  		skip_message &= !(other_participant_id == gAgentID);	// You are your best friend... Don't skip yourself @@ -2654,7 +2669,7 @@ void LLIMMgr::addMessage(      {          LLFloaterReg::showInstance("im_container");  	    LLFloaterReg::getTypedInstance<LLFloaterIMContainer>("im_container")-> -	    		flashConversationItemWidget(session_id, true); +	    		flashConversationItemWidget(new_session_id, true);      }  } @@ -2809,7 +2824,7 @@ LLUUID LLIMMgr::addSession(  		}  	} -	bool new_session = !LLIMModel::getInstance()->findIMSession(session_id); +	bool new_session = (LLIMModel::getInstance()->findIMSession(session_id) == NULL);  	//works only for outgoing ad-hoc sessions  	if (new_session && IM_SESSION_CONFERENCE_START == dialog && ids.size()) diff --git a/indra/newview/llpanelpeople.cpp b/indra/newview/llpanelpeople.cpp index c5283404f1..4138558bad 100644 --- a/indra/newview/llpanelpeople.cpp +++ b/indra/newview/llpanelpeople.cpp @@ -611,10 +611,10 @@ BOOL LLPanelPeople::postBuild()  	mGroupList->setNoItemsMsg(getString("no_groups_msg"));  	mGroupList->setNoFilteredItemsMsg(getString("no_filtered_groups_msg")); -	mNearbyList->setContextMenu(&LLPanelPeopleMenus::gNearbyMenu); -	mRecentList->setContextMenu(&LLPanelPeopleMenus::gNearbyMenu); -	mAllFriendList->setContextMenu(&LLPanelPeopleMenus::gNearbyMenu); -	mOnlineFriendList->setContextMenu(&LLPanelPeopleMenus::gNearbyMenu); +	mNearbyList->setContextMenu(&LLPanelPeopleMenus::gNearbyPeopleContextMenu); +	mRecentList->setContextMenu(&LLPanelPeopleMenus::gPeopleContextMenu); +	mAllFriendList->setContextMenu(&LLPanelPeopleMenus::gPeopleContextMenu); +	mOnlineFriendList->setContextMenu(&LLPanelPeopleMenus::gPeopleContextMenu);  	setSortOrder(mRecentList,		(ESortOrder)gSavedSettings.getU32("RecentPeopleSortOrder"),	false);  	setSortOrder(mAllFriendList,	(ESortOrder)gSavedSettings.getU32("FriendsSortOrder"),		false); @@ -1143,7 +1143,10 @@ void LLPanelPeople::onGearButtonClicked(LLUICtrl* btn)  	uuid_vec_t selected_uuids;  	getCurrentItemIDs(selected_uuids);  	// Spawn at bottom left corner of the button. -	LLPanelPeopleMenus::gNearbyMenu.show(btn, selected_uuids, 0, 0); +	if (getActiveTabName() == NEARBY_TAB_NAME) +		LLPanelPeopleMenus::gNearbyPeopleContextMenu.show(btn, selected_uuids, 0, 0); +	else +		LLPanelPeopleMenus::gPeopleContextMenu.show(btn, selected_uuids, 0, 0);  }  void LLPanelPeople::onImButtonClicked() diff --git a/indra/newview/llpanelpeoplemenus.cpp b/indra/newview/llpanelpeoplemenus.cpp index 47d6b49a50..49f7361c4a 100644 --- a/indra/newview/llpanelpeoplemenus.cpp +++ b/indra/newview/llpanelpeoplemenus.cpp @@ -39,15 +39,18 @@  #include "llcallingcard.h"			// for LLAvatarTracker  #include "lllogchat.h"  #include "llviewermenu.h"			// for gMenuHolder +#include "llconversationmodel.h" +#include "llviewerobjectlist.h"  namespace LLPanelPeopleMenus  { -NearbyMenu gNearbyMenu; +PeopleContextMenu gPeopleContextMenu; +NearbyPeopleContextMenu gNearbyPeopleContextMenu; -//== NearbyMenu =============================================================== +//== PeopleContextMenu =============================================================== -LLContextMenu* NearbyMenu::createMenu() +LLContextMenu* PeopleContextMenu::createMenu()  {  	// set up the callbacks for all of the avatar menu items  	LLUICtrl::CommitCallbackRegistry::ScopedRegistrar registrar; @@ -64,7 +67,8 @@ LLContextMenu* NearbyMenu::createMenu()  		registrar.add("Avatar.RemoveFriend",	boost::bind(&LLAvatarActions::removeFriendDialog, 		id));  		registrar.add("Avatar.IM",				boost::bind(&LLAvatarActions::startIM,					id));  		registrar.add("Avatar.Call",			boost::bind(&LLAvatarActions::startCall,				id)); -		registrar.add("Avatar.OfferTeleport",	boost::bind(&NearbyMenu::offerTeleport,					this)); +		registrar.add("Avatar.OfferTeleport",	boost::bind(&PeopleContextMenu::offerTeleport,			this)); +		registrar.add("Avatar.ZoomIn",			boost::bind(&handle_zoom_to_object,						id));  		registrar.add("Avatar.ShowOnMap",		boost::bind(&LLAvatarActions::showOnMap,				id));  		registrar.add("Avatar.Share",			boost::bind(&LLAvatarActions::share,					id));  		registrar.add("Avatar.Pay",				boost::bind(&LLAvatarActions::pay,						id)); @@ -72,33 +76,72 @@ LLContextMenu* NearbyMenu::createMenu()  		registrar.add("Avatar.InviteToGroup",	boost::bind(&LLAvatarActions::inviteToGroup,			id));  		registrar.add("Avatar.Calllog",			boost::bind(&LLAvatarActions::viewChatHistory,			id)); -		enable_registrar.add("Avatar.EnableItem", boost::bind(&NearbyMenu::enableContextMenuItem,	this, _2)); -		enable_registrar.add("Avatar.CheckItem",  boost::bind(&NearbyMenu::checkContextMenuItem,	this, _2)); +		enable_registrar.add("Avatar.EnableItem", boost::bind(&PeopleContextMenu::enableContextMenuItem, this, _2)); +		enable_registrar.add("Avatar.CheckItem",  boost::bind(&PeopleContextMenu::checkContextMenuItem,	this, _2));  		// create the context menu from the XUI  		menu = createFromFile("menu_people_nearby.xml"); +		buildContextMenu(*menu, 0x0);  	}  	else  	{  		// Set up for multi-selected People  		// registrar.add("Avatar.AddFriend",	boost::bind(&LLAvatarActions::requestFriendshipDialog,	mUUIDs)); // *TODO: unimplemented -		registrar.add("Avatar.IM",			boost::bind(&LLAvatarActions::startConference,			mUUIDs, LLUUID::null)); -		registrar.add("Avatar.Call",		boost::bind(&LLAvatarActions::startAdhocCall,			mUUIDs, LLUUID::null)); -		registrar.add("Avatar.OfferTeleport",	boost::bind(&NearbyMenu::offerTeleport,					this)); -		registrar.add("Avatar.RemoveFriend",boost::bind(&LLAvatarActions::removeFriendsDialog,		mUUIDs)); +		registrar.add("Avatar.IM",				boost::bind(&LLAvatarActions::startConference,			mUUIDs, LLUUID::null)); +		registrar.add("Avatar.Call",			boost::bind(&LLAvatarActions::startAdhocCall,			mUUIDs, LLUUID::null)); +		registrar.add("Avatar.OfferTeleport",	boost::bind(&PeopleContextMenu::offerTeleport,			this)); +		registrar.add("Avatar.RemoveFriend",	boost::bind(&LLAvatarActions::removeFriendsDialog,		mUUIDs));  		// registrar.add("Avatar.Share",		boost::bind(&LLAvatarActions::startIM,					mUUIDs)); // *TODO: unimplemented -		// registrar.add("Avatar.Pay",		boost::bind(&LLAvatarActions::pay,						mUUIDs)); // *TODO: unimplemented -		enable_registrar.add("Avatar.EnableItem",	boost::bind(&NearbyMenu::enableContextMenuItem,	this, _2)); +		// registrar.add("Avatar.Pay",			boost::bind(&LLAvatarActions::pay,						mUUIDs)); // *TODO: unimplemented +		 +		enable_registrar.add("Avatar.EnableItem",	boost::bind(&PeopleContextMenu::enableContextMenuItem, this, _2));  		// create the context menu from the XUI  		menu = createFromFile("menu_people_nearby_multiselect.xml"); +		buildContextMenu(*menu, ITEM_IN_MULTI_SELECTION);  	}      return menu;  } -bool NearbyMenu::enableContextMenuItem(const LLSD& userdata) +void PeopleContextMenu::buildContextMenu(class LLMenuGL& menu, U32 flags) +{ +    menuentry_vec_t items; +    menuentry_vec_t disabled_items; +	 +	if (flags & ITEM_IN_MULTI_SELECTION) +	{ +		items.push_back(std::string("add_friends")); +		items.push_back(std::string("remove_friends")); +		items.push_back(std::string("im")); +		items.push_back(std::string("call")); +		items.push_back(std::string("share")); +		items.push_back(std::string("pay")); +		items.push_back(std::string("offer_teleport")); +	} +	else  +	{ +		items.push_back(std::string("view_profile")); +		items.push_back(std::string("im")); +		items.push_back(std::string("offer_teleport")); +		items.push_back(std::string("voice_call")); +		items.push_back(std::string("chat_history")); +		items.push_back(std::string("separator_chat_history")); +		items.push_back(std::string("add_friend")); +		items.push_back(std::string("remove_friend")); +		items.push_back(std::string("invite_to_group")); +		items.push_back(std::string("separator_invite_to_group")); +		items.push_back(std::string("map")); +		items.push_back(std::string("share")); +		items.push_back(std::string("pay")); +		items.push_back(std::string("block_unblock")); +	} + +    hide_context_entries(menu, items, disabled_items); +} + +bool PeopleContextMenu::enableContextMenuItem(const LLSD& userdata)  {  	if(gAgent.getID() == mUUIDs.front())  	{ @@ -170,6 +213,12 @@ bool NearbyMenu::enableContextMenuItem(const LLSD& userdata)  	{  		return LLAvatarActions::canCall();  	} +	else if (item == std::string("can_zoom_in")) +	{ +		const LLUUID& id = mUUIDs.front(); + +		return gObjectList.findObject(id); +	}  	else if (item == std::string("can_show_on_map"))  	{  		const LLUUID& id = mUUIDs.front(); @@ -193,7 +242,7 @@ bool NearbyMenu::enableContextMenuItem(const LLSD& userdata)  	return false;  } -bool NearbyMenu::checkContextMenuItem(const LLSD& userdata) +bool PeopleContextMenu::checkContextMenuItem(const LLSD& userdata)  {  	std::string item = userdata.asString();  	const LLUUID& id = mUUIDs.front(); @@ -206,11 +255,50 @@ bool NearbyMenu::checkContextMenuItem(const LLSD& userdata)  	return false;  } -void NearbyMenu::offerTeleport() +void PeopleContextMenu::offerTeleport()  {  	// boost::bind cannot recognize overloaded method LLAvatarActions::offerTeleport(),  	// so we have to use a wrapper.  	LLAvatarActions::offerTeleport(mUUIDs);  } +//== NearbyPeopleContextMenu =============================================================== + +void NearbyPeopleContextMenu::buildContextMenu(class LLMenuGL& menu, U32 flags) +{ +    menuentry_vec_t items; +    menuentry_vec_t disabled_items; +	 +	if (flags & ITEM_IN_MULTI_SELECTION) +	{ +		items.push_back(std::string("add_friends")); +		items.push_back(std::string("remove_friends")); +		items.push_back(std::string("im")); +		items.push_back(std::string("call")); +		items.push_back(std::string("share")); +		items.push_back(std::string("pay")); +		items.push_back(std::string("offer_teleport")); +	} +	else  +	{ +		items.push_back(std::string("view_profile")); +		items.push_back(std::string("im")); +		items.push_back(std::string("offer_teleport")); +		items.push_back(std::string("voice_call")); +		items.push_back(std::string("chat_history")); +		items.push_back(std::string("separator_chat_history")); +		items.push_back(std::string("add_friend")); +		items.push_back(std::string("remove_friend")); +		items.push_back(std::string("invite_to_group")); +		items.push_back(std::string("separator_invite_to_group")); +		items.push_back(std::string("zoom_in")); +		items.push_back(std::string("map")); +		items.push_back(std::string("share")); +		items.push_back(std::string("pay")); +		items.push_back(std::string("block_unblock")); +	} + +    hide_context_entries(menu, items, disabled_items); +} +  } // namespace LLPanelPeopleMenus diff --git a/indra/newview/llpanelpeoplemenus.h b/indra/newview/llpanelpeoplemenus.h index d51eaec716..0a1dcef303 100644 --- a/indra/newview/llpanelpeoplemenus.h +++ b/indra/newview/llpanelpeoplemenus.h @@ -33,19 +33,33 @@ namespace LLPanelPeopleMenus  {  /** - * Menu used in the nearby people list. + * Menu used in the people lists.   */ -class NearbyMenu : public LLListContextMenu +class PeopleContextMenu : public LLListContextMenu  {  public:  	/*virtual*/ LLContextMenu* createMenu(); + +protected: +	virtual void buildContextMenu(class LLMenuGL& menu, U32 flags); +  private:  	bool enableContextMenuItem(const LLSD& userdata);  	bool checkContextMenuItem(const LLSD& userdata);  	void offerTeleport();  }; -extern NearbyMenu gNearbyMenu; +/** + * Menu used in the nearby people list. + */ +class NearbyPeopleContextMenu : public PeopleContextMenu +{ +protected: +	/*virtual*/ void buildContextMenu(class LLMenuGL& menu, U32 flags); +}; + +extern PeopleContextMenu gPeopleContextMenu; +extern NearbyPeopleContextMenu gNearbyPeopleContextMenu;  } // namespace LLPanelPeopleMenus diff --git a/indra/newview/llviewerdisplay.cpp b/indra/newview/llviewerdisplay.cpp index ffeea2f4df..40577118ba 100644 --- a/indra/newview/llviewerdisplay.cpp +++ b/indra/newview/llviewerdisplay.cpp @@ -1038,7 +1038,6 @@ void render_hud_attachments()  	if (LLPipeline::sShowHUDAttachments && !gDisconnected && setup_hud_matrices())  	{  		LLCamera hud_cam = *LLViewerCamera::getInstance(); -		LLVector3 origin = hud_cam.getOrigin();  		hud_cam.setOrigin(-1.f,0,0);  		hud_cam.setAxes(LLVector3(1,0,0), LLVector3(0,1,0), LLVector3(0,0,1));  		LLViewerCamera::updateFrustumPlanes(hud_cam, TRUE); diff --git a/indra/newview/llviewermessage.cpp b/indra/newview/llviewermessage.cpp index 2340436a01..a13c793899 100755 --- a/indra/newview/llviewermessage.cpp +++ b/indra/newview/llviewermessage.cpp @@ -2382,7 +2382,7 @@ void process_improved_im(LLMessageSystem *msg, void **user_data)  	    LLPostponedNotification::add<LLPostponedIMSystemTipNotification>(params, from_id, false);  		break; -	case IM_NOTHING_SPECIAL:  +	case IM_NOTHING_SPECIAL:	// p2p IM  		// Don't show dialog, just do IM  		if (!gAgent.isGodlike()  				&& gAgent.getRegion()->isPrelude()  @@ -2783,47 +2783,6 @@ void process_improved_im(LLMessageSystem *msg, void **user_data)  	}  	break; -	case IM_SESSION_SEND: -	{ -		if (is_do_not_disturb) -		{ -			return; -		} - -		// Only show messages if we have a session open (which -		// should happen after you get an "invitation" -		if ( !gIMMgr->hasSession(session_id) ) -		{ -			return; -		} - -		// standard message, not from system -		std::string saved; -		if(offline == IM_OFFLINE) -		{ -			saved = llformat("(Saved %s) ", formatted_time(timestamp).c_str()); -		} -		buffer = saved + message; -		BOOL is_this_agent = FALSE; -		if(from_id == gAgentID) -		{ -			is_this_agent = TRUE; -		} -		gIMMgr->addMessage( -			session_id, -			from_id, -			name, -			buffer, -			IM_OFFLINE == offline, -			ll_safe_string((char*)binary_bucket), -			IM_SESSION_INVITE, -			parent_estate_id, -			region_id, -			position, -			true); -	} -	break; -  	case IM_FROM_TASK:  		{  			if (is_do_not_disturb && !is_owned_by_me) @@ -2922,6 +2881,76 @@ void process_improved_im(LLMessageSystem *msg, void **user_data)  			LLPostponedNotification::add<LLPostponedServerObjectNotification>(params, from_id, from_group);  		}  		break; + +	case IM_SESSION_SEND:		// ad-hoc or group IMs + +		// Only show messages if we have a session open (which +		// should happen after you get an "invitation" +		if ( !gIMMgr->hasSession(session_id) ) +		{ +			return; +		} + +		else if (offline == IM_ONLINE && is_do_not_disturb) +		{ + +			// return a standard "do not disturb" message, but only do it to online IM  +			// (i.e. not other auto responses and not store-and-forward IM) +			if (!gIMMgr->hasSession(session_id)) +			{ +				// if there is not a panel for this conversation (i.e. it is a new IM conversation +				// initiated by the other party) then... +				send_do_not_disturb_message(msg, from_id, session_id); +			} + +			// now store incoming IM in chat history + +			buffer = message; +	 +			LL_INFOS("Messaging") << "process_improved_im: session_id( " << session_id << " ), from_id( " << from_id << " )" << LL_ENDL; + +			// add to IM panel, but do not bother the user +			gIMMgr->addMessage( +				session_id, +				from_id, +				name, +				buffer, +				IM_OFFLINE == offline, +				ll_safe_string((char*)binary_bucket), +				IM_SESSION_INVITE, +				parent_estate_id, +				region_id, +				position, +				true); +		} +		else +		{ +			// standard message, not from system +			std::string saved; +			if(offline == IM_OFFLINE) +			{ +				saved = llformat("(Saved %s) ", formatted_time(timestamp).c_str()); +			} + +			buffer = saved + message; + +			LL_INFOS("Messaging") << "process_improved_im: session_id( " << session_id << " ), from_id( " << from_id << " )" << LL_ENDL; + +			gIMMgr->addMessage( +				session_id, +				from_id, +				name, +				buffer, +				IM_OFFLINE == offline, +				ll_safe_string((char*)binary_bucket), +				IM_SESSION_INVITE, +				parent_estate_id, +				region_id, +				position, +				true); +		} +		break; +  	case IM_FROM_TASK_AS_ALERT:  		if (is_do_not_disturb && !is_owned_by_me)  		{ diff --git a/indra/newview/llviewerwindow.cpp b/indra/newview/llviewerwindow.cpp index e44a2cc4df..4afd90b44c 100755 --- a/indra/newview/llviewerwindow.cpp +++ b/indra/newview/llviewerwindow.cpp @@ -2827,7 +2827,6 @@ void LLViewerWindow::updateUI()  	BOOL handled = FALSE; -	BOOL handled_by_top_ctrl = FALSE;  	LLUICtrl* top_ctrl = gFocusMgr.getTopCtrl();  	LLMouseHandler* mouse_captor = gFocusMgr.getMouseCapture();  	LLView* captor_view = dynamic_cast<LLView*>(mouse_captor); @@ -3012,7 +3011,6 @@ void LLViewerWindow::updateUI()  				S32 local_x, local_y;  				top_ctrl->screenPointToLocal( x, y, &local_x, &local_y );  				handled = top_ctrl->pointInView(local_x, local_y) && top_ctrl->handleHover(local_x, local_y, mask); -				handled_by_top_ctrl = TRUE;  			}  			if ( !handled ) diff --git a/indra/newview/llvoavatar.cpp b/indra/newview/llvoavatar.cpp index c74d9f1292..d295fc60cd 100644 --- a/indra/newview/llvoavatar.cpp +++ b/indra/newview/llvoavatar.cpp @@ -3097,6 +3097,7 @@ void LLVOAvatar::idleUpdateNameTagText(BOOL new_name)  	// Rebuild name tag if state change detected  	if (mNameString.empty() +		|| (mNameString.size() == 2 && mNameString[0] == 10 && mNameString[1] == 10) // *TODO : find out why mNameString is sometimes ""  		|| new_name  		|| (!title && !mTitle.empty())  		|| (title && mTitle != title->getString()) diff --git a/indra/newview/llworldmapview.cpp b/indra/newview/llworldmapview.cpp index ccc513b80d..11b2770ec0 100644 --- a/indra/newview/llworldmapview.cpp +++ b/indra/newview/llworldmapview.cpp @@ -965,8 +965,6 @@ void LLWorldMapView::drawTracking(const LLVector3d& pos_global, const LLColor4&  	S32 text_x = x;  	S32 text_y = (S32)(y - sTrackCircleImage->getHeight()/2 - font->getLineHeight()); -	BOOL is_in_window = true; -  	if(    x < 0   		|| y < 0   		|| x >= getRect().getWidth()  @@ -979,7 +977,6 @@ void LLWorldMapView::drawTracking(const LLVector3d& pos_global, const LLColor4&  			text_x = sTrackingArrowX;  			text_y = sTrackingArrowY;  		} -		is_in_window = false;  	}  	else if (LLTracker::getTrackingStatus() == LLTracker::TRACKING_LOCATION &&  		LLTracker::getTrackedLocationType() != LLTracker::LOCATION_NOTHING) diff --git a/indra/newview/skins/default/textures/icons/collapse_to_one_line.png b/indra/newview/skins/default/textures/icons/collapse_to_one_line.pngBinary files differ new file mode 100644 index 0000000000..d57144a645 --- /dev/null +++ b/indra/newview/skins/default/textures/icons/collapse_to_one_line.png diff --git a/indra/newview/skins/default/textures/icons/expand_one_liner.png b/indra/newview/skins/default/textures/icons/expand_one_liner.pngBinary files differ new file mode 100644 index 0000000000..58b7d90131 --- /dev/null +++ b/indra/newview/skins/default/textures/icons/expand_one_liner.png diff --git a/indra/newview/skins/default/textures/textures.xml b/indra/newview/skins/default/textures/textures.xml index a07d7e4855..93c9cb02cb 100644 --- a/indra/newview/skins/default/textures/textures.xml +++ b/indra/newview/skins/default/textures/textures.xml @@ -171,6 +171,8 @@ with the same filename but different name    <texture name="Conv_toolbar_call_log" file_name="icons/Conv_toolbar_call_log.png" preload="false" />    <texture name="Conv_toolbar_close" file_name="icons/Conv_toolbar_close.png" preload="false" />    <texture name="Conv_toolbar_collapse" file_name="icons/Conv_toolbar_collapse.png" preload="false" /> +  <texture name="Conv_collapse_to_one_line" file_name="icons/collapse_to_one_line.png" preload="false" /> +  <texture name="Conv_expand_one_line" file_name="icons/expand_one_liner.png" preload="false" />    <texture name="Conv_toolbar_expand" file_name="icons/Conv_toolbar_expand.png" preload="false" />    <texture name="Conv_toolbar_hang_up" file_name="icons/Conv_toolbar_hang_up.png" preload="false" />    <texture name="Conv_toolbar_open_call" file_name="icons/Conv_toolbar_open_call.png" preload="false" /> diff --git a/indra/newview/skins/default/xui/en/floater_im_container.xml b/indra/newview/skins/default/xui/en/floater_im_container.xml index 12c1676127..65f623a47e 100644 --- a/indra/newview/skins/default/xui/en/floater_im_container.xml +++ b/indra/newview/skins/default/xui/en/floater_im_container.xml @@ -61,7 +61,7 @@                       image_unselected="Toolbar_Middle_Off"                       menu_filename="menu_participant_view.xml"                       layout="topleft" -                     left="10" +                     left="5"                       name="sort_btn"                       tool_tip="View/sort options"                       top="5" @@ -75,7 +75,7 @@                       image_unselected="Toolbar_Middle_Off"                       layout="topleft"                       top="5" -                     left_pad="4" +                     left_pad="2"                       name="add_btn"                       tool_tip="Start a new conversation"                       width="31"/> @@ -88,7 +88,7 @@                       image_unselected="Toolbar_Middle_Off"                       layout="topleft"                       top="5" -                     left_pad="4" +                     left_pad="2"                       name="speak_btn"                       tool_tip="Speak with people using your microphone"                       width="31"/>	 @@ -114,7 +114,7 @@                  </layout_panel>              </layout_stack>              <panel -             bottom="-5" +             bottom="-1"               follows="all"               layout="topleft"               name="conversations_list_panel" @@ -129,7 +129,7 @@           name="messages_layout_panel"           expanded_min_dim="222">              <panel_container -             bottom="-5" +             bottom="-1"               follows="all"               layout="topleft"               left="0" 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 8f0574177f..e081ea8e74 100644 --- a/indra/newview/skins/default/xui/en/floater_im_session.xml +++ b/indra/newview/skins/default/xui/en/floater_im_session.xml @@ -20,6 +20,12 @@      <floater.string name="call_btn_start">Conv_toolbar_open_call</floater.string>      <floater.string name="call_btn_stop">Conv_toolbar_hang_up</floater.string>      <floater.string +     name="collapseline_icon" +     value="Conv_collapse_to_one_line"/> +    <floater.string +     name="expandline_icon" +     value="Conv_expand_one_line"/> +    <floater.string       name="collapse_icon"       value="Conv_toolbar_collapse"/>      <floater.string @@ -65,14 +71,28 @@          top="0"          left="0"          height="355" -        width="394">  -     <panel +        width="394"> +   <layout_stack +   animate="false"  +   default_tab_group="2" +   follows="all" +  height="355" +  width="394" +  layout="topleft" +  orientation="vertical" +   name="main_stack" +  tab_group="1" +  top="0" +  left="0"> +   +     <layout_panel           follows="left|top|right"           layout="topleft"           name="toolbar_panel"           top="0"           left="0"           height="35" +         min_height="35"           width="394">                        <menu_button                   menu_filename="menu_im_session_showmodes.xml" @@ -98,7 +118,7 @@  				 image_unselected="Toolbar_Middle_Off"  				 layout="topleft"  			 	 top="5" -			 	 left_pad="4" +			 	 left_pad="2"  				 name="gear_btn"  				 visible="false"  				 tool_tip="Actions on selected person" @@ -113,7 +133,7 @@                   image_unselected="Toolbar_Middle_Off"                   layout="topleft"                   top="5" -                 left_pad="4" +                 left_pad="2"                   name="add_btn"                   tool_tip="Add someone to this conversation"                   width="31"/> @@ -126,7 +146,7 @@                   image_unselected="Toolbar_Middle_Off"                   layout="topleft"                   top="5" -                 left_pad="4" +                 left_pad="2"                   name="voice_call_btn"                   tool_tip="Open voice connection"                   width="31"/> @@ -151,7 +171,7 @@                   image_unselected="Toolbar_Middle_Off"                   layout="topleft"                   top="5" -                 left="283" +                 left="292"                   name="close_btn"                   tool_tip="End this conversation"                   width="31" /> @@ -164,7 +184,7 @@               	 image_unselected="Toolbar_Middle_Off"                   layout="topleft"                   top="5" -                 left_pad="5" +                 left_pad="2"                   name="expand_collapse_btn"                   tool_tip="Collapse/Expand this pane"                   width="31" /> @@ -177,15 +197,22 @@               	 image_unselected="Toolbar_Middle_Off"                   layout="topleft"                   top="5" -                 left_pad="5" +                 left_pad="2"                   name="tear_off_btn"                   width="31" /> -     </panel> +     </layout_panel> +     <layout_panel +      name="body_panel" +      follows="all" +      width="394"  +      height="235"  +      user_resize="false" +      auto_resize="true">    <layout_stack     animate="true"      default_tab_group="2"    follows="all" -  height="310" +  height="275"    width="394"    layout="topleft"    orientation="horizontal" @@ -198,9 +225,9 @@        follows="all"        min_width="115"        width="150"  -      height="310"  +      height="275"         user_resize="true" -      auto_resize="true"> +      auto_resize="false">        </layout_panel>      <layout_panel         default_tab_group="3" @@ -208,7 +235,7 @@         tab_group="2"         follows="all"         top="0" -       height="310" +       height="275"  	   width="244"         layout="topleft"         user_resize="true" @@ -221,13 +248,13 @@           follows="all"           layout="topleft"           visible="true" -         height="275" +         height="240"           width="244">           <layout_stack            animate="true"             default_tab_group="2"            follows="all" -          height="275" +          height="240"            width="244"            layout="topleft"            visible="true" @@ -258,7 +285,7 @@                   width="230" />              </layout_panel>              <layout_panel -             height="248" +             height="233"               width="210"               layout="topleft"               follows="all" @@ -273,7 +300,7 @@                  font="SansSerifSmall"                  follows="all"                  visible="true" -                height="240" +                height="225"                  name="chat_history"                  parse_highlights="true"                  parse_urls="true" @@ -283,26 +310,90 @@              </layout_panel>             </layout_stack>             </panel> -            <chat_editor +    </layout_panel> +  </layout_stack> +  </layout_panel> +  <layout_panel +             height="35" +             layout="topleft" +             follows="left|right|bottom" +             left_delta="0" +             right="0" +             top_delta="0"               bottom="0" +             visible="true" +             user_resize="false" +             auto_resize="false" +             name="chat_layout_panel"> +   <layout_stack +   animate="true"  +   default_tab_group="2" +   follows="all" +   height="35" +   right="0" +   layout="topleft" +   orientation="horizontal" +   name="input_panels" +   top_pad="0" +   left="0"> +     <layout_panel +             height="35" +             layout="topleft" +             follows="left|right|bottom" +             left_delta="0" +             top_delta="0" +             bottom="0" +             visible="true" +             user_resize="false" +             auto_resize="true" +             name="input_editor_layout_panel"> +              <chat_editor +             top="6"               expand_lines_count="5"               follows="left|right|bottom" -	           font="SansSerifSmall" +               font="SansSerifSmall"               visible="true"               height="20"               is_expandable="true"               label="To"               text_tentative_color="TextFgTentativeColor" -             layout="bottomleft" +             layout="topleft"               name="chat_editor"               max_length="1023"               spellcheck="true"               tab_group="3" -             width="220" -             left="10" +             width="160" +             left="5" +             right="-5"               wrap="true">              </chat_editor> -    </layout_panel> +            </layout_panel> +            <layout_panel              +             height="35" +             layout="topleft" +             follows="left|right|bottom" +             left_delta="0" +             top_delta="0" +             bottom="0" +             width="35" +             visible="true" +             user_resize="false" +             auto_resize="false" +             name="input_button_layout_panel"> +            <button +                 follows="left|right|bottom" +                 height="25" +                 image_hover_unselected="Toolbar_Middle_Over" +                 image_overlay="Conv_expand_one_line" +                 image_selected="Toolbar_Middle_Selected" +                 image_unselected="Toolbar_Middle_Off" +                 layout="topleft" +                 name="minz_btn" +                 tool_tip="Shows/hides message panel" +                 width="28"/> +           </layout_panel> +  </layout_stack> +  </layout_panel>    </layout_stack>      </view>  </floater> diff --git a/indra/newview/skins/default/xui/en/menu_conversation.xml b/indra/newview/skins/default/xui/en/menu_conversation.xml index fd5c86b3ca..5a13ef0a59 100644 --- a/indra/newview/skins/default/xui/en/menu_conversation.xml +++ b/indra/newview/skins/default/xui/en/menu_conversation.xml @@ -89,7 +89,14 @@          <on_click function="Avatar.DoToSelected" parameter="invite_to_group" />          <on_enable function="Avatar.EnableItem" parameter="can_invite" />      </menu_item_call> -    <menu_item_separator layout="topleft" name="separator_invite_to_group"/>		 +    <menu_item_separator layout="topleft" name="separator_invite_to_group"/> +    <menu_item_call +     label="Zoom In" +     layout="topleft" +     name="zoom_in"> +      <on_click function="Avatar.DoToSelected" parameter="zoom_in" /> +      <on_enable function="Avatar.EnableItem" parameter="can_zoom_in" /> +    </menu_item_call>      <menu_item_call       label="Map"       layout="topleft" diff --git a/indra/newview/skins/default/xui/en/menu_im_conversation.xml b/indra/newview/skins/default/xui/en/menu_im_conversation.xml index 8882d0a7d8..43287c6ec3 100644 --- a/indra/newview/skins/default/xui/en/menu_im_conversation.xml +++ b/indra/newview/skins/default/xui/en/menu_im_conversation.xml @@ -50,6 +50,13 @@      <menu_item_separator       layout="topleft"/>      <menu_item_call +       label="Zoom In" +       layout="topleft" +       name="zoom_in"> +      <on_click function="Avatar.DoToSelected" parameter="zoom_in" /> +      <on_enable function="Avatar.EnableItem" parameter="can_zoom_in" /> +    </menu_item_call> +    <menu_item_call       label="Map"       layout="topleft"       name="map"> diff --git a/indra/newview/skins/default/xui/en/menu_people_nearby.xml b/indra/newview/skins/default/xui/en/menu_people_nearby.xml index 60a6c98514..3abb5f7bc8 100644 --- a/indra/newview/skins/default/xui/en/menu_people_nearby.xml +++ b/indra/newview/skins/default/xui/en/menu_people_nearby.xml @@ -1,18 +1,18 @@  <?xml version="1.0" encoding="utf-8" standalone="yes" ?>  <context_menu   layout="topleft" - name="Avatar Context Menu"> + name="Nearby People Context Menu">      <menu_item_call       label="View Profile"       layout="topleft" -     name="View Profile"> +     name="view_profile">          <menu_item_call.on_click           function="Avatar.Profile" />      </menu_item_call>      <menu_item_call       label="IM"       layout="topleft" -     name="IM"> +     name="im">          <menu_item_call.on_click           function="Avatar.IM" />          <menu_item_call.on_enable @@ -21,7 +21,7 @@      </menu_item_call>      <menu_item_call      label="Offer Teleport" -    name="teleport"> +    name="offer_teleport">        <menu_item_call.on_click         function="Avatar.OfferTeleport"/>        <menu_item_call.on_enable @@ -31,7 +31,7 @@      <menu_item_call       label="Voice call"       layout="topleft" -     name="Call"> +     name="voice_call">          <menu_item_call.on_click           function="Avatar.Call" />          <menu_item_call.on_enable @@ -42,18 +42,18 @@      <menu_item_call       label="View chat history..."       layout="topleft" -     name="Chat history"> +     name="chat_history">          <menu_item_call.on_click           function="Avatar.Calllog" />          <menu_item_call.on_enable        	 function="Avatar.EnableItem"           parameter="can_callog"/>      </menu_item_call> -    <menu_item_separator /> +    <menu_item_separator name="separator_chat_history"/>      <menu_item_call       label="Add Friend"       layout="topleft" -     name="Add Friend"> +     name="add_friend">          <menu_item_call.on_click           function="Avatar.AddFriend" />          <menu_item_call.on_visible @@ -63,7 +63,7 @@      <menu_item_call       label="Remove Friend"       layout="topleft" -     name="Remove Friend"> +     name="remove_friend">          <menu_item_call.on_click           function="Avatar.RemoveFriend" />          <menu_item_call.on_enable @@ -73,18 +73,28 @@      <menu_item_call       label="Invite to group..."       layout="topleft" -     name="Invite"> +     name="invite_to_group">          <menu_item_call.on_click           function="Avatar.InviteToGroup" />          <menu_item_call.on_enable        	 function="Avatar.EnableItem"           parameter="can_invite"/>      </menu_item_call> -    <menu_item_separator /> +    <menu_item_separator name="separator_invite_to_group"/> +    <menu_item_call +     label="Zoom In" +     layout="topleft" +     name="zoom_in"> +      <menu_item_call.on_click +       function="Avatar.ZoomIn" /> +      <menu_item_call.on_enable +       function="Avatar.EnableItem" +       parameter="can_zoom_in"/> +    </menu_item_call>      <menu_item_call       label="Map"       layout="topleft" -     name="Map"> +     name="map">          <menu_item_call.on_click           function="Avatar.ShowOnMap" />          <menu_item_call.on_enable @@ -94,7 +104,7 @@      <menu_item_call       label="Share"       layout="topleft" -     name="Share"> +     name="share">          <menu_item_call.on_click           function="Avatar.Share" />          <menu_item_call.on_enable @@ -104,7 +114,7 @@      <menu_item_call       label="Pay"       layout="topleft" -     name="Pay"> +     name="pay">          <menu_item_call.on_click           function="Avatar.Pay" />          <menu_item_call.on_enable @@ -114,7 +124,7 @@      <menu_item_check       label="Block/Unblock"       layout="topleft" -     name="Block/Unblock"> +     name="block_unblock">          <menu_item_check.on_click           function="Avatar.BlockUnblock" />          <menu_item_check.on_check diff --git a/indra/newview/skins/default/xui/en/menu_people_nearby_multiselect.xml b/indra/newview/skins/default/xui/en/menu_people_nearby_multiselect.xml index 5d58a9d289..5f973088fd 100644 --- a/indra/newview/skins/default/xui/en/menu_people_nearby_multiselect.xml +++ b/indra/newview/skins/default/xui/en/menu_people_nearby_multiselect.xml @@ -6,7 +6,7 @@       enabled="false"       label="Add Friends"       layout="topleft" -     name="Add Friends"> +     name="add_friends">          <on_click           function="Avatar.AddFriends" />          <on_enable @@ -16,7 +16,7 @@      <menu_item_call       label="Remove Friends"       layout="topleft" -     name="Remove Friend"> +     name="remove_friends">          <menu_item_call.on_click           function="Avatar.RemoveFriend" />          <menu_item_call.on_enable @@ -26,7 +26,7 @@      <menu_item_call       label="IM"       layout="topleft" -     name="IM"> +     name="im">          <on_click           function="Avatar.IM" />      </menu_item_call> @@ -34,7 +34,7 @@       enabled="false"       label="Call"       layout="topleft" -     name="Call"> +     name="call">          <on_click           function="Avatar.Call" />          <on_enable @@ -45,7 +45,7 @@       enabled="false"       label="Share"       layout="topleft" -     name="Share"> +     name="share">          <on_click           function="Avatar.Share" />      </menu_item_call> @@ -53,13 +53,13 @@       enabled="false"       label="Pay"       layout="topleft" -     name="Pay"> +     name="pay">          <on_click           function="Avatar.Pay" />      </menu_item_call>      <menu_item_call      label="Offer Teleport" -    name="teleport"> +    name="offer_teleport">        <menu_item_call.on_click         function="Avatar.OfferTeleport"/>        <menu_item_call.on_enable diff --git a/indra/newview/skins/default/xui/en/panel_preferences_chat.xml b/indra/newview/skins/default/xui/en/panel_preferences_chat.xml index 9db3816c92..bd096ebb88 100644 --- a/indra/newview/skins/default/xui/en/panel_preferences_chat.xml +++ b/indra/newview/skins/default/xui/en/panel_preferences_chat.xml @@ -429,7 +429,6 @@      </text>      <line_editor -    	enabled="false"          control_name="InstantMessageLogPath"          border_style="line"          border_thickness="1" | 
