diff options
Diffstat (limited to 'indra/newview')
28 files changed, 194 insertions, 91 deletions
diff --git a/indra/newview/llcallfloater.cpp b/indra/newview/llcallfloater.cpp index 76e058a1c3..c8552de66a 100644 --- a/indra/newview/llcallfloater.cpp +++ b/indra/newview/llcallfloater.cpp @@ -115,6 +115,9 @@ LLCallFloater::LLCallFloater(const LLSD& key)  	mFactoryMap["non_avatar_caller"] = LLCallbackMap(create_non_avatar_caller, NULL);  	LLVoiceClient::getInstance()->addObserver(this);  	LLTransientFloaterMgr::getInstance()->addControlView(this); + +	// force docked state since this floater doesn't save it between recreations +	setDocked(true);  }  LLCallFloater::~LLCallFloater() diff --git a/indra/newview/llchatitemscontainerctrl.cpp b/indra/newview/llchatitemscontainerctrl.cpp index e164aa8fc4..81edb55f93 100644 --- a/indra/newview/llchatitemscontainerctrl.cpp +++ b/indra/newview/llchatitemscontainerctrl.cpp @@ -144,6 +144,7 @@ void LLNearbyChatToastPanel::init(LLSD& notification)  	std::string		messageText = notification["message"].asString();		// UTF-8 line of text  	std::string		fromName = notification["from"].asString();	// agent or object name  	mFromID = notification["from_id"].asUUID();		// agent id or object id +	mFromName = fromName;  	int sType = notification["source"].asInteger();      mSourceType = (EChatSourceType)sType; diff --git a/indra/newview/llchatitemscontainerctrl.h b/indra/newview/llchatitemscontainerctrl.h index 4d730573d9..b28c9dbc4b 100644 --- a/indra/newview/llchatitemscontainerctrl.h +++ b/indra/newview/llchatitemscontainerctrl.h @@ -60,6 +60,7 @@ public:  	static LLNearbyChatToastPanel* createInstance();  	const LLUUID& getFromID() const { return mFromID;} +	const std::string& getFromName() const { return mFromName; }  	//void	addText		(const std::string& message ,  const LLStyle::Params& input_params = LLStyle::Params());  	//void	setMessage	(const LLChat& msg); @@ -84,9 +85,11 @@ public:  	virtual void draw(); +	//*TODO REMOVE, why a dup of getFromID?  	const LLUUID&	messageID() const { return mFromID;}  private:  	LLUUID			mFromID;	// agent id or object id +	std::string		mFromName;  	EChatSourceType	mSourceType; diff --git a/indra/newview/llfloatercamera.cpp b/indra/newview/llfloatercamera.cpp index abf60a29b4..d0188352c7 100644 --- a/indra/newview/llfloatercamera.cpp +++ b/indra/newview/llfloatercamera.cpp @@ -241,6 +241,7 @@ LLFloaterCamera::LLFloaterCamera(const LLSD& val)  BOOL LLFloaterCamera::postBuild()  {  	setIsChrome(TRUE); +	setTitleVisible(TRUE); // restore title visibility after chrome applying  	mRotate = getChild<LLJoystickCameraRotate>(ORBIT);  	mZoom = getChild<LLPanelCameraZoom>(ZOOM); @@ -295,6 +296,31 @@ void LLFloaterCamera::setMode(ECameraControlMode mode)  	updateState();  } +void LLFloaterCamera::setModeTitle(const ECameraControlMode mode) +{ +	std::string title;  +	switch(mode) +	{ +	case CAMERA_CTRL_MODE_ORBIT: +		title = getString("orbit_mode_title"); +		break; +	case CAMERA_CTRL_MODE_PAN: +		title = getString("pan_mode_title"); +		break; +	case CAMERA_CTRL_MODE_AVATAR_VIEW: +		title = getString("avatar_view_mode_title"); +		break; +	case CAMERA_CTRL_MODE_FREE_CAMERA: +		title = getString("free_mode_title"); +		break; +	default: +		// title should be provided for all modes +		llassert(false); +		break; +	} +	setTitle(title); +} +  void LLFloaterCamera::switchMode(ECameraControlMode mode)  {  	setMode(mode); @@ -355,6 +381,8 @@ void LLFloaterCamera::updateState()  	childSetVisible(PRESETS, CAMERA_CTRL_MODE_AVATAR_VIEW == mCurrMode);  	updateCameraPresetButtons(); +	setModeTitle(mCurrMode); +  	//hiding or showing the panel with controls by reshaping the floater  	bool showControls = CAMERA_CTRL_MODE_FREE_CAMERA != mCurrMode; diff --git a/indra/newview/llfloatercamera.h b/indra/newview/llfloatercamera.h index f908ad08be..b268839165 100644 --- a/indra/newview/llfloatercamera.h +++ b/indra/newview/llfloatercamera.h @@ -100,6 +100,9 @@ private:  	/* sets a new mode preserving previous one and updates ui*/  	void setMode(ECameraControlMode mode); +	/** set title appropriate to passed mode */ +	void setModeTitle(const ECameraControlMode mode); +  	/* updates the state (UI) according to the current mode */  	void updateState(); diff --git a/indra/newview/llfolderview.cpp b/indra/newview/llfolderview.cpp index 7d527fa98a..e50753c1c5 100644 --- a/indra/newview/llfolderview.cpp +++ b/indra/newview/llfolderview.cpp @@ -2163,6 +2163,15 @@ void LLFolderView::doIdle()  			LLSelectFirstFilteredItem filter;  			applyFunctorRecursively(filter);  		} + +		// Open filtered folders for folder views with mAutoSelectOverride=TRUE. +		// Used by LLPlacesFolderView. +		if (mAutoSelectOverride && mFilter->getFilterSubString() != "") +		{ +			LLOpenFilteredFolders filter; +			applyFunctorRecursively(filter); +		} +  		scrollToShowSelection();  	} diff --git a/indra/newview/llimfloatercontainer.cpp b/indra/newview/llimfloatercontainer.cpp index db7998fe6e..d518318b0e 100644 --- a/indra/newview/llimfloatercontainer.cpp +++ b/indra/newview/llimfloatercontainer.cpp @@ -96,29 +96,8 @@ void LLIMFloaterContainer::addFloater(LLFloater* floaterp,  	LLUUID session_id = floaterp->getKey(); -	LLIconCtrl* icon = 0; - -	if(gAgent.isInGroup(session_id, TRUE)) -	{ -		LLGroupIconCtrl::Params icon_params = LLUICtrlFactory::instance().getDefaultParams<LLGroupIconCtrl>(); -		icon_params.group_id = session_id; -		icon = LLUICtrlFactory::instance().createWidget<LLGroupIconCtrl>(icon_params); - -		mSessions[session_id] = floaterp; -		floaterp->mCloseSignal.connect(boost::bind(&LLIMFloaterContainer::onCloseFloater, this, session_id)); -	} -	else -	{ -		LLUUID avatar_id = LLIMModel::getInstance()->getOtherParticipantID(session_id); - -		LLAvatarIconCtrl::Params icon_params = LLUICtrlFactory::instance().getDefaultParams<LLAvatarIconCtrl>(); -		icon_params.avatar_id = avatar_id; -		icon = LLUICtrlFactory::instance().createWidget<LLAvatarIconCtrl>(icon_params); - -		mSessions[session_id] = floaterp; -		floaterp->mCloseSignal.connect(boost::bind(&LLIMFloaterContainer::onCloseFloater, this, session_id)); -	} -	mTabContainer->setTabImage(floaterp, icon); +	floaterp->mCloseSignal.connect(boost::bind(&LLIMFloaterContainer::onCloseFloater, this, session_id)); +	mSessions[session_id] = floaterp;  }  void LLIMFloaterContainer::onCloseFloater(LLUUID& id) diff --git a/indra/newview/llimview.cpp b/indra/newview/llimview.cpp index faddffe0fc..e87399abab 100644 --- a/indra/newview/llimview.cpp +++ b/indra/newview/llimview.cpp @@ -1473,6 +1473,8 @@ LLCallDialog::LLCallDialog(const LLSD& payload)  	  mLifetime(DEFAULT_LIFETIME)  {  	setAutoFocus(FALSE); +	// force docked state since this floater doesn't save it between recreations +	setDocked(true);  }  void LLCallDialog::getAllowedRect(LLRect& rect) diff --git a/indra/newview/lllocationhistory.cpp b/indra/newview/lllocationhistory.cpp index df93930d33..7906d9b20f 100644 --- a/indra/newview/lllocationhistory.cpp +++ b/indra/newview/lllocationhistory.cpp @@ -63,6 +63,7 @@ void LLLocationHistory::addItem(const LLLocationHistoryItem& item) {  		mItems.erase(mItems.begin(), mItems.end()-max_items);  	}  	llassert((S32)mItems.size() <= max_items); +	mChangedSignal(ADD);  }  /* @@ -87,9 +88,10 @@ bool LLLocationHistory::touchItem(const LLLocationHistoryItem& item) {  void LLLocationHistory::removeItems()  {  	mItems.clear(); +	mChangedSignal(CLEAR);  } -bool LLLocationHistory::getMatchingItems(std::string substring, location_list_t& result) const +bool LLLocationHistory::getMatchingItems(const std::string& substring, location_list_t& result) const  {  	// *TODO: an STL algorithm would look nicer  	result.clear(); @@ -160,7 +162,7 @@ void LLLocationHistory::load()  		return;  	} -	removeItems(); +	mItems.clear();// need to use a direct call of clear() method to avoid signal invocation  	// add each line in the file to the list  	std::string line; @@ -179,5 +181,5 @@ void LLLocationHistory::load()  	file.close(); -	mLoadedSignal(); +	mChangedSignal(LOAD);  } diff --git a/indra/newview/lllocationhistory.h b/indra/newview/lllocationhistory.h index 65f0dd2e1b..fb71fbaa0f 100644 --- a/indra/newview/lllocationhistory.h +++ b/indra/newview/lllocationhistory.h @@ -111,9 +111,16 @@ class LLLocationHistory: public LLSingleton<LLLocationHistory>  	LOG_CLASS(LLLocationHistory);  public: +	enum EChangeType +	{ +		 ADD +		,CLEAR +		,LOAD +	}; +	  	typedef std::vector<LLLocationHistoryItem>	location_list_t; -	typedef boost::function<void()>		loaded_callback_t; -	typedef boost::signals2::signal<void()> loaded_signal_t; +	typedef boost::function<void(EChangeType event)>			history_changed_callback_t; +	typedef boost::signals2::signal<void(EChangeType event)>	history_changed_signal_t;  	LLLocationHistory(); @@ -122,8 +129,8 @@ public:  	void                    removeItems();  	size_t					getItemCount() const	{ return mItems.size(); }  	const location_list_t&	getItems() const		{ return mItems; } -	bool					getMatchingItems(std::string substring, location_list_t& result) const; -	boost::signals2::connection	setLoadedCallback(loaded_callback_t cb) { return mLoadedSignal.connect(cb); } +	bool					getMatchingItems(const std::string& substring, location_list_t& result) const; +	boost::signals2::connection	setChangedCallback(history_changed_callback_t cb) { return mChangedSignal.connect(cb); }  	void					save() const;  	void					load(); @@ -133,7 +140,7 @@ private:  	location_list_t			mItems;  	std::string							mFilename; /// File to store the history to. -	loaded_signal_t						mLoadedSignal; +	history_changed_signal_t			mChangedSignal;  };  #endif diff --git a/indra/newview/lllocationinputctrl.cpp b/indra/newview/lllocationinputctrl.cpp index 5f233bece0..0ea4b1f6da 100644 --- a/indra/newview/lllocationinputctrl.cpp +++ b/indra/newview/lllocationinputctrl.cpp @@ -52,7 +52,6 @@  #include "llinventoryobserver.h"  #include "lllandmarkactions.h"  #include "lllandmarklist.h" -#include "lllocationhistory.h"  #include "llteleporthistory.h"  #include "llsidetray.h"  #include "llslurl.h" @@ -377,9 +376,10 @@ LLLocationInputCtrl::LLLocationInputCtrl(const LLLocationInputCtrl::Params& p)  	// - Update the location string on parcel change.  	mParcelMgrConnection = LLViewerParcelMgr::getInstance()->addAgentParcelChangedCallback(  		boost::bind(&LLLocationInputCtrl::onAgentParcelChange, this)); - -	mLocationHistoryConnection = LLLocationHistory::getInstance()->setLoadedCallback( -			boost::bind(&LLLocationInputCtrl::onLocationHistoryLoaded, this)); +	// LLLocationHistory instance is being created before the location input control, so we have to update initial state of button manually. +	mButton->setEnabled(LLLocationHistory::instance().getItemCount() > 0); +	mLocationHistoryConnection = LLLocationHistory::getInstance()->setChangedCallback( +			boost::bind(&LLLocationInputCtrl::onLocationHistoryChanged, this,_1));  	mRemoveLandmarkObserver	= new LLRemoveLandmarkObserver(this);  	mAddLandmarkObserver	= new LLAddLandmarkObserver(this); @@ -620,9 +620,13 @@ void LLLocationInputCtrl::onLandmarkLoaded(LLLandmark* lm)  	updateAddLandmarkButton();  } -void LLLocationInputCtrl::onLocationHistoryLoaded() +void LLLocationInputCtrl::onLocationHistoryChanged(LLLocationHistory::EChangeType event)  { -	rebuildLocationHistory(); +	if(event == LLLocationHistory::LOAD) +	{ +		rebuildLocationHistory(); +	} +	mButton->setEnabled(LLLocationHistory::instance().getItemCount() > 0);  }  void LLLocationInputCtrl::onLocationPrearrange(const LLSD& data) @@ -893,7 +897,7 @@ void LLLocationInputCtrl::positionMaturityIcon()  	mMaturityIcon->setVisible(rect.mRight < mTextEntry->getRect().getWidth() - right_pad);  } -void LLLocationInputCtrl::rebuildLocationHistory(std::string filter) +void LLLocationInputCtrl::rebuildLocationHistory(const std::string& filter)  {  	LLLocationHistory::location_list_t filtered_items;  	const LLLocationHistory::location_list_t* itemsp = NULL; diff --git a/indra/newview/lllocationinputctrl.h b/indra/newview/lllocationinputctrl.h index 4bb41f3bf4..dac6be2a24 100644 --- a/indra/newview/lllocationinputctrl.h +++ b/indra/newview/lllocationinputctrl.h @@ -36,6 +36,7 @@  #include "llcombobox.h"  #include "lliconctrl.h"		// Params  #include "lltextbox.h"		// Params +#include "lllocationhistory.h"  class LLLandmark; @@ -137,7 +138,7 @@ private:  	void					refreshHealth();  	void					positionMaturityIcon(); -	void					rebuildLocationHistory(std::string filter = ""); +	void					rebuildLocationHistory(const std::string& filter = LLStringUtil::null);  	bool 					findTeleportItemsByTitle(const LLTeleportHistoryItem& item, const std::string& filter);  	void					setText(const LLStringExplicit& text);  	void					updateAddLandmarkButton(); @@ -147,7 +148,7 @@ private:  	void					changeLocationPresentation();  	void					onInfoButtonClicked(); -	void					onLocationHistoryLoaded(); +	void					onLocationHistoryChanged(LLLocationHistory::EChangeType event);  	void					onLocationPrearrange(const LLSD& data);  	void 					onTextEditorRightClicked(S32 x, S32 y, MASK mask);  	void					onLandmarkLoaded(LLLandmark* lm); diff --git a/indra/newview/llmoveview.cpp b/indra/newview/llmoveview.cpp index 97e2b5b86e..1853b511be 100644 --- a/indra/newview/llmoveview.cpp +++ b/indra/newview/llmoveview.cpp @@ -77,7 +77,6 @@ LLFloaterMove::LLFloaterMove(const LLSD& key)  	mTurnRightButton(NULL),  	mMoveUpButton(NULL),  	mMoveDownButton(NULL), -	mStopFlyingButton(NULL),  	mModeActionsPanel(NULL),  	mCurrentMode(MM_WALK)  { @@ -87,6 +86,7 @@ LLFloaterMove::LLFloaterMove(const LLSD& key)  BOOL LLFloaterMove::postBuild()  {  	setIsChrome(TRUE); +	setTitleVisible(TRUE); // restore title visibility after chrome applying  	LLDockableFloater::postBuild(); @@ -112,8 +112,6 @@ BOOL LLFloaterMove::postBuild()  	mMoveDownButton->setHeldDownCallback(boost::bind(&LLFloaterMove::moveDown, this)); -	mStopFlyingButton = getChild<LLButton>("stop_fly_btn"); -  	mModeActionsPanel = getChild<LLPanel>("panel_modes");  	LLButton* btn; @@ -126,11 +124,6 @@ BOOL LLFloaterMove::postBuild()  	btn = getChild<LLButton>("mode_fly_btn");  	btn->setCommitCallback(boost::bind(&LLFloaterMove::onFlyButtonClick, this)); -	btn = getChild<LLButton>("stop_fly_btn"); -	btn->setCommitCallback(boost::bind(&LLFloaterMove::onStopFlyingButtonClick, this)); - - -  	showFlyControls(false);  	initModeTooltips(); @@ -304,10 +297,6 @@ void LLFloaterMove::onFlyButtonClick()  {  	setMovementMode(MM_FLY);  } -void LLFloaterMove::onStopFlyingButtonClick() -{ -	setMovementMode(gAgent.getAlwaysRun() ? MM_RUN : MM_WALK); -}  void LLFloaterMove::setMovementMode(const EMovementMode mode)  { @@ -353,16 +342,13 @@ void LLFloaterMove::updateButtonsWithMovementMode(const EMovementMode newMode)  	showFlyControls(MM_FLY == newMode);  	setModeTooltip(newMode);  	setModeButtonToggleState(newMode); +	setModeTitle(newMode);  }  void LLFloaterMove::showFlyControls(bool bShow)  {  	mMoveUpButton->setVisible(bShow);  	mMoveDownButton->setVisible(bShow); - -	// *TODO: mantipov: mStopFlyingButton from the FloaterMove is not used now. -	// It was not completly removed until functionality is reviewed by LL -	mStopFlyingButton->setVisible(FALSE);  }  void LLFloaterMove::initModeTooltips() @@ -420,11 +406,30 @@ void LLFloaterMove::setModeTooltip(const EMovementMode mode)  	}  } +void LLFloaterMove::setModeTitle(const EMovementMode mode) +{ +	std::string title;  +	switch(mode) +	{ +	case MM_WALK: +		title = getString("walk_title"); +		break; +	case MM_RUN: +		title = getString("run_title"); +		break; +	case MM_FLY: +		title = getString("fly_title"); +		break; +	default: +		// title should be provided for all modes +		llassert(false); +		break; +	} +	setTitle(title); +} +  /**   * Updates position of the floater to be center aligned with Move button. - *  - * Because Tip floater created as dependent floater this method  - * must be called before "showQuickTips()" to get Tip floater be positioned at the right side of the floater   */  void LLFloaterMove::updatePosition()  { diff --git a/indra/newview/llmoveview.h b/indra/newview/llmoveview.h index 06463f02af..dcca8308d9 100644 --- a/indra/newview/llmoveview.h +++ b/indra/newview/llmoveview.h @@ -86,13 +86,12 @@ private:  	void onWalkButtonClick();  	void onRunButtonClick();  	void onFlyButtonClick(); -	void onStopFlyingButtonClick();  	void initMovementMode();  	void setMovementMode(const EMovementMode mode);  	void showFlyControls(bool bShow);  	void initModeTooltips();  	void setModeTooltip(const EMovementMode mode); -	void showQuickTips(const EMovementMode mode); +	void setModeTitle(const EMovementMode mode);  	void initModeButtonMap();  	void setModeButtonToggleState(const EMovementMode mode);  	void updateButtonsWithMovementMode(const EMovementMode newMode); @@ -108,7 +107,6 @@ public:  	LLButton*				mMoveUpButton;  	LLButton*				mMoveDownButton;  private: -	LLButton*				mStopFlyingButton;  	LLPanel*				mModeActionsPanel;  	typedef std::map<LLView*, std::string> control_tooltip_map_t; diff --git a/indra/newview/llnavigationbar.cpp b/indra/newview/llnavigationbar.cpp index d42e4bc250..e11df06d86 100644 --- a/indra/newview/llnavigationbar.cpp +++ b/indra/newview/llnavigationbar.cpp @@ -451,6 +451,12 @@ void LLNavigationBar::onLocationSelection()  		return;  	//get selected item from combobox item  	LLSD value = mCmbLocation->getSelectedValue(); +	if(value.isUndefined() && !mCmbLocation->getTextEntry()->isDirty()) +	{ +		// At this point we know that: there is no selected item in list and text field has NOT been changed +		// So there is no sense to try to change the location +		return; +	}  	/* since navbar list support autocompletion it contains several types of item: landmark, teleport hystory item,  	 * typed by user slurl or region name. Let's find out which type of item the user has selected   	 * to make decision about adding this location into typed history. see mSaveToLocationHistory diff --git a/indra/newview/llnearbychathandler.cpp b/indra/newview/llnearbychathandler.cpp index a211adc79d..08ae93c3a6 100644 --- a/indra/newview/llnearbychathandler.cpp +++ b/indra/newview/llnearbychathandler.cpp @@ -176,10 +176,11 @@ void LLNearbyChatScreenChannel::addNotification(LLSD& notification)  	if(m_active_toasts.size())  	{  		LLUUID fromID = notification["from_id"].asUUID();		// agent id or object id +		std::string from = notification["from"].asString();  		LLToast* toast = m_active_toasts[0];  		LLNearbyChatToastPanel* panel = dynamic_cast<LLNearbyChatToastPanel*>(toast->getPanel()); -		if(panel && panel->messageID() == fromID && panel->canAddText()) +		if(panel && panel->messageID() == fromID && panel->getFromName() == from && panel->canAddText())  		{  			panel->addMessage(notification);  			toast->reshapeToPanel(); diff --git a/indra/newview/llpanelmaininventory.cpp b/indra/newview/llpanelmaininventory.cpp index 2d3401966b..50cfc7d177 100644 --- a/indra/newview/llpanelmaininventory.cpp +++ b/indra/newview/llpanelmaininventory.cpp @@ -420,10 +420,8 @@ void LLPanelMainInventory::onFilterEdit(const std::string& search_string )  	gInventory.startBackgroundFetch(); -	std::string uppercase_search_string = search_string; -	LLStringUtil::toUpper(uppercase_search_string); -	mFilterSubString = uppercase_search_string; -	if (mActivePanel->getFilterSubString().empty() && uppercase_search_string.empty()) +	mFilterSubString = search_string; +	if (mActivePanel->getFilterSubString().empty() && mFilterSubString.empty())  	{  			// current filter and new filter empty, do nothing  			return; @@ -437,7 +435,7 @@ void LLPanelMainInventory::onFilterEdit(const std::string& search_string )  	}  	// set new filter string -	mActivePanel->setFilterSubString(mFilterSubString); +	setFilterSubString(mFilterSubString);  } diff --git a/indra/newview/llpanelplaceinfo.cpp b/indra/newview/llpanelplaceinfo.cpp index 9ebc8ca2b9..f6133d4446 100644 --- a/indra/newview/llpanelplaceinfo.cpp +++ b/indra/newview/llpanelplaceinfo.cpp @@ -256,7 +256,7 @@ void LLPanelPlaceInfo::reshape(S32 width, S32 height, BOOL called_from_parent)  	static LLUICachedControl<S32> scrollbar_size ("UIScrollbarSize", 0);  	S32 scroll_height = mScrollContainer->getRect().getHeight(); -	if (mScrollingPanelMinHeight >= scroll_height) +	if (mScrollingPanelMinHeight > scroll_height)  	{  		mScrollingPanel->reshape(mScrollingPanelWidth, mScrollingPanelMinHeight);  	} diff --git a/indra/newview/llviewerchat.cpp b/indra/newview/llviewerchat.cpp index 8de87eb602..320456e1e2 100644 --- a/indra/newview/llviewerchat.cpp +++ b/indra/newview/llviewerchat.cpp @@ -37,6 +37,7 @@  #include "llagent.h" 	// gAgent		  #include "lluicolortable.h"  #include "llviewercontrol.h" // gSavedSettings +#include "llinstantmessage.h" //SYSTEM_FROM  // LLViewerChat @@ -55,7 +56,7 @@ void LLViewerChat::getChatColor(const LLChat& chat, LLColor4& r_color)  				r_color = LLUIColorTable::instance().getColor("SystemChatColor");   				break;  			case CHAT_SOURCE_AGENT: -				if (chat.mFromID.isNull()) +				if (chat.mFromID.isNull() || SYSTEM_FROM == chat.mFromName)  				{  					r_color = LLUIColorTable::instance().getColor("SystemChatColor");  				} diff --git a/indra/newview/llvoiceclient.cpp b/indra/newview/llvoiceclient.cpp index 59606f17b2..5ba13efca2 100644 --- a/indra/newview/llvoiceclient.cpp +++ b/indra/newview/llvoiceclient.cpp @@ -102,6 +102,13 @@ const F32 UPDATE_THROTTLE_SECONDS = 0.1f;  const F32 LOGIN_RETRY_SECONDS = 10.0f;  const int MAX_LOGIN_RETRIES = 12; +// Defines the maximum number of times(in a row) "stateJoiningSession" case for spatial channel is reached in stateMachine() +// which is treated as normal. If this number is exceeded we suspect there is a problem with connection +// to voice server (EXT-4313). When voice works correctly, there is from 1 to 15 times. 50 was chosen  +// to make sure we don't make mistake when slight connection problems happen- situation when connection to server is  +// blocked is VERY rare and it's better to sacrifice response time in this situation for the sake of stability. +const int MAX_NORMAL_JOINING_SPATIAL_NUM = 50; +  static void setUUIDFromStringHash(LLUUID &uuid, const std::string &str)  {  	LLMD5 md5_uuid; @@ -1221,6 +1228,7 @@ LLVoiceClient::LLVoiceClient() :  	mRelogRequested(false),  	mConnected(false),  	mPump(NULL), +	mSpatialJoiningNum(0),  	mTuningMode(false),  	mTuningEnergy(0.0f), @@ -2223,6 +2231,8 @@ void LLVoiceClient::stateMachine()  		//MARK: stateNoChannel  		case stateNoChannel: +			 +			mSpatialJoiningNum = 0;  			// Do this here as well as inside sendPositionalUpdate().    			// Otherwise, if you log in but don't join a proximal channel (such as when your login location has voice disabled), your friends list won't sync.  			sendFriendsListUpdates(); @@ -2279,6 +2289,23 @@ void LLVoiceClient::stateMachine()  		//MARK: stateJoiningSession  		case stateJoiningSession:		// waiting for session handle + +			// If this is true we have problem with connection to voice server (EXT-4313). +			// See descriptions of mSpatialJoiningNum and MAX_NORMAL_JOINING_SPATIAL_NUM. +			if(mSpatialJoiningNum == MAX_NORMAL_JOINING_SPATIAL_NUM)  +			{ +				// Notify observers to let them know there is problem with voice +				notifyStatusObservers(LLVoiceClientStatusObserver::STATUS_VOICE_DISABLED); +				llwarns << "There seems to be problem with connection to voice server. Disabling voice chat abilities." << llendl; +			} + +			// Increase mSpatialJoiningNum only for spatial sessions- it's normal to reach this case for +			// example for p2p many times while waiting for response, so it can't be used to detect errors +			if(mAudioSession && mAudioSession->mIsSpatial) +			{ +				mSpatialJoiningNum++; +			} +			  			// joinedAudioSession() will transition from here to stateSessionJoined.  			if(!mVoiceEnabled)  			{ @@ -2302,6 +2329,8 @@ void LLVoiceClient::stateMachine()  		//MARK: stateSessionJoined  		case stateSessionJoined:		// session handle received +			 +			mSpatialJoiningNum = 0;  			// It appears that I need to wait for BOTH the SessionGroup.AddSession response and the SessionStateChangeEvent with state 4  			// before continuing from this state.  They can happen in either order, and if I don't wait for both, things can get stuck.  			// For now, the SessionGroup.AddSession response handler sets mSessionHandle and the SessionStateChangeEvent handler transitions to stateSessionJoined. @@ -5992,7 +6021,9 @@ bool LLVoiceClient::voiceEnabled()  bool LLVoiceClient::voiceWorking()  {  	//Added stateSessionTerminated state to avoid problems with call in parcels with disabled voice (EXT-4758) -	return (stateLoggedIn <= mState) && (mState <= stateSessionTerminated); +	// Condition with joining spatial num was added to take into account possible problems with connection to voice +	// server(EXT-4313). See bug descriptions and comments for MAX_NORMAL_JOINING_SPATIAL_NUM for more info. +	return (mSpatialJoiningNum < MAX_NORMAL_JOINING_SPATIAL_NUM) && (stateLoggedIn <= mState) && (mState <= stateSessionTerminated);  }  void LLVoiceClient::setLipSyncEnabled(BOOL enabled) diff --git a/indra/newview/llvoiceclient.h b/indra/newview/llvoiceclient.h index a96cf18e27..aaacab69e0 100644 --- a/indra/newview/llvoiceclient.h +++ b/indra/newview/llvoiceclient.h @@ -586,6 +586,10 @@ static	void updatePosition(void);  		state mState;  		bool mSessionTerminateRequested;  		bool mRelogRequested; +		// Number of times (in a row) "stateJoiningSession" case for spatial channel is reached in stateMachine(). +		// The larger it is the greater is possibility there is a problem with connection to voice server. +		// Introduced while fixing EXT-4313. +		int mSpatialJoiningNum;  		void setState(state inState);  		state getState(void)  { return mState; }; diff --git a/indra/newview/skins/default/xui/en/floater_camera.xml b/indra/newview/skins/default/xui/en/floater_camera.xml index f69c763f78..b45e39a111 100644 --- a/indra/newview/skins/default/xui/en/floater_camera.xml +++ b/indra/newview/skins/default/xui/en/floater_camera.xml @@ -27,6 +27,22 @@       name="move_tooltip">          Move Camera Up and Down, Left and Right      </floater.string> +    <floater.string +     name="orbit_mode_title"> +        Orbit +    </floater.string> +    <floater.string +     name="pan_mode_title"> +        Pan +    </floater.string> +    <floater.string +     name="avatar_view_mode_title"> +        Presets +    </floater.string> +    <floater.string +     name="free_mode_title"> +        View Object +    </floater.string>      <panel       border="false"       height="110" @@ -232,7 +248,7 @@           image_selected="PushButton_Selected_Press"           name="avatarview_btn"           tab_stop="false" -         tool_tip="See as avatar" +         tool_tip="Presets"           width="25">          </button>          <button 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 65a05f3ec5..0f098bbb52 100644 --- a/indra/newview/skins/default/xui/en/floater_im_container.xml +++ b/indra/newview/skins/default/xui/en/floater_im_container.xml @@ -22,9 +22,7 @@       tab_width="64"       tab_max_width = "134"       tab_height="16" -     use_custom_icon_ctrl="true" -     tab_icon_ctrl_pad="2" -     halign="left" +     halign="center"       use_ellipses="true"       top="0"       width="390" /> diff --git a/indra/newview/skins/default/xui/en/floater_moveview.xml b/indra/newview/skins/default/xui/en/floater_moveview.xml index 0a5820ce73..8e2c57764b 100644 --- a/indra/newview/skins/default/xui/en/floater_moveview.xml +++ b/indra/newview/skins/default/xui/en/floater_moveview.xml @@ -38,6 +38,18 @@       name="fly_back_tooltip">          Fly Backwards (press Down Arrow or S)      </string> +    <string +     name="walk_title"> +        Walk +    </string> +    <string +     name="run_title"> +        Run +    </string> +    <string +     name="fly_title"> +        Fly +    </string>      <panel       border="false"       height="83" @@ -179,16 +191,5 @@           tool_tip="Flying mode"           top="2"           width="31" /> -        <button -         visible="false" -         follows="left|bottom" -         height="20" -         label="Stop Flying" -         layout="topleft" -         left="0" -         name="stop_fly_btn" -         tool_tip="Stop flying" -         top="2" -         width="115" />      </panel>  </floater> diff --git a/indra/newview/skins/default/xui/en/panel_landmark_info.xml b/indra/newview/skins/default/xui/en/panel_landmark_info.xml index 66070c028d..befeb182f9 100644 --- a/indra/newview/skins/default/xui/en/panel_landmark_info.xml +++ b/indra/newview/skins/default/xui/en/panel_landmark_info.xml @@ -89,13 +89,13 @@          <panel           bg_alpha_color="DkGray2"           follows="left|top|right" -         height="700" +         height="630"           layout="topleft"           left="0"           min_height="300"           name="scrolling_panel"           top="0" -         width="285"> +         width="310">              <texture_picker               enabled="false"           follows="left|top|right" diff --git a/indra/newview/skins/default/xui/en/panel_people.xml b/indra/newview/skins/default/xui/en/panel_people.xml index daab52f06a..f0186a46bb 100644 --- a/indra/newview/skins/default/xui/en/panel_people.xml +++ b/indra/newview/skins/default/xui/en/panel_people.xml @@ -222,7 +222,7 @@               top="10"               width="293"               wrap="true"> -                To add friends try [secondlife:///app/search/people global search] or click on a user to add them as a friend. +                To add friends try [secondlife:///app/search/people global search] or use right click on a user to add them as a friend.  If you're looking for people to hang out with, [secondlife:///app/worldmap try the Map].               </text>          </panel> diff --git a/indra/newview/skins/default/xui/en/panel_place_profile.xml b/indra/newview/skins/default/xui/en/panel_place_profile.xml index b22dad5841..7672bd0799 100644 --- a/indra/newview/skins/default/xui/en/panel_place_profile.xml +++ b/indra/newview/skins/default/xui/en/panel_place_profile.xml @@ -174,13 +174,13 @@          <panel           bg_alpha_color="DkGray2"           follows="left|top|right" -         height="700" +         height="532"           layout="topleft"           left="0"           min_height="300"           name="scrolling_panel"           top="0" -         width="285"> +         width="310">              <texture_picker               enabled="false"           follows="left|top|right" diff --git a/indra/newview/skins/default/xui/en/widgets/search_editor.xml b/indra/newview/skins/default/xui/en/widgets/search_editor.xml index a9a760b3a4..32e443a058 100644 --- a/indra/newview/skins/default/xui/en/widgets/search_editor.xml +++ b/indra/newview/skins/default/xui/en/widgets/search_editor.xml @@ -3,6 +3,7 @@    clear_button_visible="false"    search_button_visible="true"    text_pad_left="6"  +  text_pad_right="6"     select_on_focus="true"    text_tentative_color="TextFgTentativeColor"    background_image="TextField_Search_Off" @@ -21,5 +22,6 @@     image_unselected="Icon_Close_Foreground"     image_selected="Icon_Close_Press"     pad_right="4" +   pad_left="4"     width="16" />  </search_editor>  | 
