diff options
Diffstat (limited to 'indra')
| -rw-r--r-- | indra/newview/llagent.cpp | 31 | ||||
| -rw-r--r-- | indra/newview/llagent.h | 8 | ||||
| -rw-r--r-- | indra/newview/llinventorypanel.cpp | 14 | ||||
| -rw-r--r-- | indra/newview/llpanelprimmediacontrols.cpp | 53 | ||||
| -rw-r--r-- | indra/newview/llpanelprimmediacontrols.h | 8 | ||||
| -rw-r--r-- | indra/newview/llsidepaneltaskinfo.cpp | 12 | ||||
| -rw-r--r-- | indra/newview/skins/default/xui/en/sidepanel_task_info.xml | 11 | 
7 files changed, 106 insertions, 31 deletions
| diff --git a/indra/newview/llagent.cpp b/indra/newview/llagent.cpp index ea3c2eb312..77552663ab 100644 --- a/indra/newview/llagent.cpp +++ b/indra/newview/llagent.cpp @@ -218,7 +218,10 @@ LLAgent::LLAgent() :  	mFirstLogin(FALSE),  	mGenderChosen(FALSE), -	mAppearanceSerialNum(0) +	mAppearanceSerialNum(0), + +	mMouselookModeInSignal(NULL), +	mMouselookModeOutSignal(NULL)  {  	for (U32 i = 0; i < TOTAL_CONTROLS; i++)  	{ @@ -269,6 +272,9 @@ LLAgent::~LLAgent()  {  	cleanup(); +	delete mMouselookModeInSignal; +	delete mMouselookModeOutSignal; +  	// *Note: this is where LLViewerCamera::getInstance() used to be deleted.  } @@ -1735,6 +1741,11 @@ void LLAgent::endAnimationUpdateUI()  		LLFloaterCamera::onLeavingMouseLook(); +		if (mMouselookModeOutSignal) +		{ +			(*mMouselookModeOutSignal)(); +		} +  		// Only pop if we have pushed...  		if (TRUE == mViewsPushed)  		{ @@ -1840,6 +1851,11 @@ void LLAgent::endAnimationUpdateUI()  		mViewsPushed = TRUE; +		if (mMouselookModeInSignal) +		{ +			(*mMouselookModeInSignal)(); +		} +  		// hide all floaters except the mini map  #if 0 // Use this once all floaters are registered @@ -1899,7 +1915,6 @@ void LLAgent::endAnimationUpdateUI()  				}  			}  		} -  	}  	else if (gAgentCamera.getCameraMode() == CAMERA_MODE_CUSTOMIZE_AVATAR)  	{ @@ -1931,6 +1946,18 @@ void LLAgent::endAnimationUpdateUI()  	gAgentCamera.updateLastCamera();  } +boost::signals2::connection LLAgent::setMouselookModeInCallback( const camera_signal_t::slot_type& cb ) +{ +	if (!mMouselookModeInSignal) mMouselookModeInSignal = new camera_signal_t(); +	return mMouselookModeInSignal->connect(cb); +} + +boost::signals2::connection LLAgent::setMouselookModeOutCallback( const camera_signal_t::slot_type& cb ) +{ +	if (!mMouselookModeOutSignal) mMouselookModeOutSignal = new camera_signal_t(); +	return mMouselookModeOutSignal->connect(cb); +} +  //-----------------------------------------------------------------------------  // heardChat()  //----------------------------------------------------------------------------- diff --git a/indra/newview/llagent.h b/indra/newview/llagent.h index aebebad96a..896408c0dd 100644 --- a/indra/newview/llagent.h +++ b/indra/newview/llagent.h @@ -39,6 +39,8 @@  #include "llvoavatardefines.h"  #include "llslurl.h" +#include <boost/signals2.hpp> +  extern const BOOL 	ANIMATE;  extern const U8 	AGENT_STATE_TYPING;  // Typing indication  extern const U8 	AGENT_STATE_EDITING; // Set when agent has objects selected @@ -410,7 +412,13 @@ public:  	BOOL			getCustomAnim() const { return mCustomAnim; }  	void			setCustomAnim(BOOL anim) { mCustomAnim = anim; } +	typedef boost::signals2::signal<void ()> camera_signal_t; +	boost::signals2::connection setMouselookModeInCallback( const camera_signal_t::slot_type& cb ); +	boost::signals2::connection setMouselookModeOutCallback( const camera_signal_t::slot_type& cb ); +  private: +	camera_signal_t* mMouselookModeInSignal; +	camera_signal_t* mMouselookModeOutSignal;  	BOOL            mCustomAnim; 		// Current animation is ANIM_AGENT_CUSTOMIZE ?  	LLAnimPauseRequest mPauseRequest;  	BOOL			mViewsPushed; 		// Keep track of whether or not we have pushed views diff --git a/indra/newview/llinventorypanel.cpp b/indra/newview/llinventorypanel.cpp index 0870b5b8dd..5a9d1524f3 100644 --- a/indra/newview/llinventorypanel.cpp +++ b/indra/newview/llinventorypanel.cpp @@ -921,6 +921,8 @@ LLInventoryPanel* LLInventoryPanel::getActiveInventoryPanel(BOOL auto_open)  {  	S32 z_min = S32_MAX;  	LLInventoryPanel* res = NULL; +	LLFloater* active_inv_floaterp = NULL; +  	// A. If the inventory side panel is open, use that preferably.  	if (is_inventorysp_active())  	{ @@ -941,6 +943,7 @@ LLInventoryPanel* LLInventoryPanel::getActiveInventoryPanel(BOOL auto_open)  		{  			res = inventorySP->getActivePanel();  			z_min = gFloaterView->getZOrder(inv_floater); +			active_inv_floaterp = inv_floater;  		}  		else  		{ @@ -960,10 +963,19 @@ LLInventoryPanel* LLInventoryPanel::getActiveInventoryPanel(BOOL auto_open)  			{  				res = iv->getPanel();  				z_min = z_order; +				active_inv_floaterp = iv;  			}  		}  	} -	if (res) return res; + +	if (res) +	{ +		// Make sure the floater is not minimized (STORM-438). +		if (active_inv_floaterp && active_inv_floaterp->isMinimized()) +			active_inv_floaterp->setMinimized(FALSE); + +		return res; +	}  	// C. If no panels are open and we don't want to force open a panel, then just abort out.  	if (!auto_open) return NULL; diff --git a/indra/newview/llpanelprimmediacontrols.cpp b/indra/newview/llpanelprimmediacontrols.cpp index 8ae3553857..82ff6c3487 100644 --- a/indra/newview/llpanelprimmediacontrols.cpp +++ b/indra/newview/llpanelprimmediacontrols.cpp @@ -92,7 +92,8 @@ LLPanelPrimMediaControls::LLPanelPrimMediaControls() :  	mZoomObjectID(LLUUID::null),  	mZoomObjectFace(0),  	mVolumeSliderVisible(0), -	mWindowShade(NULL) +	mWindowShade(NULL), +	mHideImmediately(false)  {  	mCommitCallbackRegistrar.add("MediaCtrl.Close",		boost::bind(&LLPanelPrimMediaControls::onClickClose, this));  	mCommitCallbackRegistrar.add("MediaCtrl.Back",		boost::bind(&LLPanelPrimMediaControls::onClickBack, this)); @@ -207,6 +208,8 @@ BOOL LLPanelPrimMediaControls::postBuild()  	mMediaAddress->setFocusReceivedCallback(boost::bind(&LLPanelPrimMediaControls::onInputURL, _1, this )); +	gAgent.setMouselookModeInCallback(boost::bind(&LLPanelPrimMediaControls::onMouselookModeIn, this)); +  	LLWindowShade::Params window_shade_params;  	window_shade_params.name = "window_shade"; @@ -722,26 +725,22 @@ void LLPanelPrimMediaControls::draw()  	}  	F32 alpha = getDrawContext().mAlpha; -	if(mFadeTimer.getStarted()) +	if(mHideImmediately) +	{ +		//hide this panel +		clearFaceOnFade(); + +		mHideImmediately = false; +	} +	else if(mFadeTimer.getStarted())  	{  		F32 time = mFadeTimer.getElapsedTimeF32();  		alpha *= llmax(lerp(1.0, 0.0, time / mControlFadeTime), 0.0f);  		if(time >= mControlFadeTime)  		{ -			if(mClearFaceOnFade) -			{ -				// Hiding this object makes scroll events go missing after it fades out  -				// (see DEV-41755 for a full description of the train wreck). -				// Only hide the controls when we're untargeting. -				setVisible(FALSE); - -				mClearFaceOnFade = false; -				mVolumeSliderVisible = 0; -				mTargetImplID = LLUUID::null; -				mTargetObjectID = LLUUID::null; -				mTargetObjectFace = 0; -			} +			//hide this panel +			clearFaceOnFade();  		}  	} @@ -1319,6 +1318,30 @@ bool LLPanelPrimMediaControls::shouldVolumeSliderBeVisible()  	return mVolumeSliderVisible > 0;  } + +void LLPanelPrimMediaControls::clearFaceOnFade() +{ +	if(mClearFaceOnFade) +	{ +		// Hiding this object makes scroll events go missing after it fades out +		// (see DEV-41755 for a full description of the train wreck). +		// Only hide the controls when we're untargeting. +		setVisible(FALSE); + +		mClearFaceOnFade = false; +		mVolumeSliderVisible = 0; +		mTargetImplID = LLUUID::null; +		mTargetObjectID = LLUUID::null; +		mTargetObjectFace = 0; +	} +} + +void LLPanelPrimMediaControls::onMouselookModeIn() +{ +	LLViewerMediaFocus::getInstance()->clearHover(); +	mHideImmediately = true; +} +  void LLPanelPrimMediaControls::showNotification(LLNotificationPtr notify)  {  	delete mWindowShade; diff --git a/indra/newview/llpanelprimmediacontrols.h b/indra/newview/llpanelprimmediacontrols.h index 0b9664359c..66956181f2 100644 --- a/indra/newview/llpanelprimmediacontrols.h +++ b/indra/newview/llpanelprimmediacontrols.h @@ -59,6 +59,7 @@ public:  	void showNotification(LLNotificationPtr notify);  	void hideNotification(); +  	enum EZoomLevel  	{  		ZOOM_NONE = 0, @@ -136,7 +137,11 @@ private:  	LLPluginClassMedia* getTargetMediaPlugin();  private: -	 + +	void clearFaceOnFade(); + +	void onMouselookModeIn(); +  	LLView *mMediaRegion;  	LLUICtrl *mBackCtrl;  	LLUICtrl *mFwdCtrl; @@ -185,6 +190,7 @@ private:  	bool mPauseFadeout;  	bool mUpdateSlider;  	bool mClearFaceOnFade; +	bool mHideImmediately;  	LLMatrix4 mLastCameraMat;  	EZoomLevel mCurrentZoom; diff --git a/indra/newview/llsidepaneltaskinfo.cpp b/indra/newview/llsidepaneltaskinfo.cpp index 47d904dfcc..8774482acd 100644 --- a/indra/newview/llsidepaneltaskinfo.cpp +++ b/indra/newview/llsidepaneltaskinfo.cpp @@ -1120,17 +1120,17 @@ void LLSidepanelTaskInfo::updateVerbs()  	*/  	LLSafeHandle<LLObjectSelection> object_selection = LLSelectMgr::getInstance()->getSelection(); -	const BOOL multi_select = (object_selection->getNumNodes() > 1); +	const BOOL any_selected = (object_selection->getNumNodes() > 0); -	mOpenBtn->setVisible(!multi_select); -	mPayBtn->setVisible(!multi_select); -	mBuyBtn->setVisible(!multi_select); -	mDetailsBtn->setVisible(multi_select); -	mDetailsBtn->setEnabled(multi_select); +	mOpenBtn->setVisible(true); +	mPayBtn->setVisible(true); +	mBuyBtn->setVisible(true); +	mDetailsBtn->setVisible(true);  	mOpenBtn->setEnabled(enable_object_open());  	mPayBtn->setEnabled(enable_pay_object());  	mBuyBtn->setEnabled(enable_buy_object()); +	mDetailsBtn->setEnabled(any_selected);  }  void LLSidepanelTaskInfo::onOpenButtonClicked() diff --git a/indra/newview/skins/default/xui/en/sidepanel_task_info.xml b/indra/newview/skins/default/xui/en/sidepanel_task_info.xml index afaf41d073..e2b3d81bf6 100644 --- a/indra/newview/skins/default/xui/en/sidepanel_task_info.xml +++ b/indra/newview/skins/default/xui/en/sidepanel_task_info.xml @@ -533,7 +533,7 @@  		     left="5"  		     name="open_btn"  		     top="0" -		     width="100" /> +		     width="73" />  	    <button  		     follows="bottom|left"  		     height="23" @@ -542,7 +542,7 @@  		     left_pad="5"  		     name="pay_btn"  		     top="0" -		     width="100" /> +		     width="73" />  	    <button  		     follows="bottom|left"  		     height="23" @@ -551,17 +551,16 @@  		     left_pad="5"  		     name="buy_btn"  		     top="0" -		     width="100" /> +		     width="73" />          <button  		     follows="bottom|left"  		     height="23"  		     label="Details"  		     layout="topleft" -		     left="5" +		     left_pad="5"  		     name="details_btn"  		     top="0" -		     width="100" -			 visible="false" /> +		     width="74" />  	</panel>  </panel> | 
