diff options
Diffstat (limited to 'indra/newview/llnearbychathandler.cpp')
| -rw-r--r-- | indra/newview/llnearbychathandler.cpp | 58 | 
1 files changed, 52 insertions, 6 deletions
diff --git a/indra/newview/llnearbychathandler.cpp b/indra/newview/llnearbychathandler.cpp index 47d32e57fb..d2ad78f140 100644 --- a/indra/newview/llnearbychathandler.cpp +++ b/indra/newview/llnearbychathandler.cpp @@ -64,6 +64,18 @@ public:  	LLNearbyChatScreenChannel(const LLUUID& id):LLScreenChannelBase(id)   	{  		mStopProcessing = false; + +		LLControlVariable* ctrl = gSavedSettings.getControl("NearbyToastLifeTime").get(); +		if (ctrl) +		{ +			ctrl->getSignal()->connect(boost::bind(&LLNearbyChatScreenChannel::updateToastsLifetime, this)); +		} + +		ctrl = gSavedSettings.getControl("NearbyToastFadingTime").get(); +		if (ctrl) +		{ +			ctrl->getSignal()->connect(boost::bind(&LLNearbyChatScreenChannel::updateToastFadingTime, this)); +		}  	}  	void addNotification	(LLSD& notification); @@ -109,13 +121,26 @@ protected:  		if (!toast) return;  		LL_DEBUGS("NearbyChat") << "Pooling toast" << llendl;  		toast->setVisible(FALSE); -		toast->stopTimer(); +		toast->stopFading();  		toast->setIsHidden(true); + +		// Nearby chat toasts that are hidden, not destroyed. They are collected to the toast pool, so that +		// they can be used next time, this is done for performance. But if the toast lifetime was changed +		// (from preferences floater (STORY-36)) while it was shown (at this moment toast isn't in the pool yet) +		// changes don't take affect. +		// So toast's lifetime should be updated each time it's added to the pool. Otherwise viewer would have +		// to be restarted so that changes take effect. +		toast->setLifetime(gSavedSettings.getS32("NearbyToastLifeTime")); +		toast->setFadingTime(gSavedSettings.getS32("NearbyToastFadingTime"));  		m_toast_pool.push_back(toast->getHandle());  	}  	void	createOverflowToast(S32 bottom, F32 timer); +	void 	updateToastsLifetime(); + +	void	updateToastFadingTime(); +  	create_toast_panel_callback_t m_create_toast_panel_callback_t;  	bool	createPoolToast(); @@ -205,6 +230,27 @@ void LLNearbyChatScreenChannel::onToastFade(LLToast* toast)  	arrangeToasts();  } +void LLNearbyChatScreenChannel::updateToastsLifetime() +{ +	S32 seconds = gSavedSettings.getS32("NearbyToastLifeTime"); +	toast_list_t::iterator it; + +	for(it = m_toast_pool.begin(); it != m_toast_pool.end(); ++it) +	{ +		(*it).get()->setLifetime(seconds); +	} +} + +void LLNearbyChatScreenChannel::updateToastFadingTime() +{ +	S32 seconds = gSavedSettings.getS32("NearbyToastFadingTime"); +	toast_list_t::iterator it; + +	for(it = m_toast_pool.begin(); it != m_toast_pool.end(); ++it) +	{ +		(*it).get()->setFadingTime(seconds); +	} +}  bool	LLNearbyChatScreenChannel::createPoolToast()  { @@ -250,7 +296,7 @@ void LLNearbyChatScreenChannel::addNotification(LLSD& notification)  			{  				panel->addMessage(notification);  				toast->reshapeToPanel(); -				toast->resetTimer(); +				toast->startFading();  				arrangeToasts();  				return; @@ -295,7 +341,7 @@ void LLNearbyChatScreenChannel::addNotification(LLSD& notification)  	panel->init(notification);  	toast->reshapeToPanel(); -	toast->resetTimer(); +	toast->startFading();  	m_active_toasts.push_back(toast->getHandle()); @@ -325,9 +371,9 @@ void LLNearbyChatScreenChannel::arrangeToasts()  int sort_toasts_predicate(LLHandle<LLToast> first, LLHandle<LLToast> second)  { -	F32 v1 = first.get()->getTimer()->getEventTimer().getElapsedTimeF32(); -	F32 v2 = second.get()->getTimer()->getEventTimer().getElapsedTimeF32(); -	return v1 < v2; +	F32 v1 = first.get()->getTimeLeftToLive(); +	F32 v2 = second.get()->getTimeLeftToLive(); +	return v1 > v2;  }  void LLNearbyChatScreenChannel::showToastsBottom()  | 
