diff options
| author | Cho <cho@lindenlab.com> | 2013-02-02 01:36:59 +0000 | 
|---|---|---|
| committer | Cho <cho@lindenlab.com> | 2013-02-02 01:36:59 +0000 | 
| commit | 2fe6fce0183904936a3af7d9ce707b60b34895d1 (patch) | |
| tree | 4bc619cfb2b51792fb08555f93e27477c89ddb8f | |
| parent | 142833f93f54cfe5127785e58a44cfec855178dc (diff) | |
| parent | 1192abd7eb0dff000be69f21d4d7cc7e0ecef561 (diff) | |
merging
| -rw-r--r-- | indra/llui/llmenugl.cpp | 8 | ||||
| -rw-r--r-- | indra/newview/llavatarlist.cpp | 52 | ||||
| -rw-r--r-- | indra/newview/llavatarlist.h | 3 | ||||
| -rw-r--r-- | indra/newview/llavatarlistitem.cpp | 55 | ||||
| -rw-r--r-- | indra/newview/llavatarlistitem.h | 3 | ||||
| -rw-r--r-- | indra/newview/llfloaterimsession.cpp | 17 | ||||
| -rw-r--r-- | indra/newview/llfloaterimsession.h | 15 | 
7 files changed, 83 insertions, 70 deletions
| diff --git a/indra/llui/llmenugl.cpp b/indra/llui/llmenugl.cpp index b7148bb91b..f7bf39c897 100644 --- a/indra/llui/llmenugl.cpp +++ b/indra/llui/llmenugl.cpp @@ -593,12 +593,12 @@ BOOL LLMenuItemSeparatorGL::handleMouseDown(S32 x, S32 y, MASK mask)  	{  		// the menu items are in the child list in bottom up order  		LLView* prev_menu_item = parent_menu->findNextSibling(this); -		return prev_menu_item ? prev_menu_item->handleMouseDown(x, prev_menu_item->getRect().getHeight(), mask) : FALSE; +		return (prev_menu_item && prev_menu_item->getVisible() && prev_menu_item->getEnabled()) ? prev_menu_item->handleMouseDown(x, prev_menu_item->getRect().getHeight(), mask) : FALSE;  	}  	else  	{  		LLView* next_menu_item = parent_menu->findPrevSibling(this); -		return next_menu_item ? next_menu_item->handleMouseDown(x, 0, mask) : FALSE; +		return (next_menu_item && next_menu_item->getVisible() && next_menu_item->getEnabled()) ? next_menu_item->handleMouseDown(x, 0, mask) : FALSE;  	}  } @@ -608,12 +608,12 @@ BOOL LLMenuItemSeparatorGL::handleMouseUp(S32 x, S32 y, MASK mask)  	if (y > getRect().getHeight() / 2)  	{  		LLView* prev_menu_item = parent_menu->findNextSibling(this); -		return prev_menu_item ? prev_menu_item->handleMouseUp(x, prev_menu_item->getRect().getHeight(), mask) : FALSE; +		return (prev_menu_item && prev_menu_item->getVisible() && prev_menu_item->getEnabled()) ? prev_menu_item->handleMouseUp(x, prev_menu_item->getRect().getHeight(), mask) : FALSE;  	}  	else  	{  		LLView* next_menu_item = parent_menu->findPrevSibling(this); -		return next_menu_item ? next_menu_item->handleMouseUp(x, 0, mask) : FALSE; +		return (next_menu_item && next_menu_item->getVisible() && next_menu_item->getEnabled()) ? next_menu_item->handleMouseUp(x, 0, mask) : FALSE;  	}  } diff --git a/indra/newview/llavatarlist.cpp b/indra/newview/llavatarlist.cpp index e54e47180f..9f02f301a1 100644 --- a/indra/newview/llavatarlist.cpp +++ b/indra/newview/llavatarlist.cpp @@ -46,6 +46,7 @@  #include "lluuid.h"  #include "llvoiceclient.h"  #include "llviewercontrol.h"	// for gSavedSettings +#include "lltooldraganddrop.h"  static LLDefaultChildRegistry::Register<LLAvatarList> r("avatar_list"); @@ -462,6 +463,57 @@ BOOL LLAvatarList::handleRightMouseDown(S32 x, S32 y, MASK mask)  	return handled;  } +BOOL LLAvatarList::handleMouseDown(S32 x, S32 y, MASK mask) +{ +	gFocusMgr.setMouseCapture(this); + +	S32 screen_x; +	S32 screen_y; +	localPointToScreen(x, y, &screen_x, &screen_y); +	LLToolDragAndDrop::getInstance()->setDragStart(screen_x, screen_y); + +	return LLFlatListViewEx::handleMouseDown(x, y, mask); +} + +BOOL LLAvatarList::handleMouseUp( S32 x, S32 y, MASK mask ) +{ +	if(hasMouseCapture()) +	{ +		gFocusMgr.setMouseCapture(NULL); +	} + +	return LLFlatListViewEx::handleMouseUp(x, y, mask); +} + +BOOL LLAvatarList::handleHover(S32 x, S32 y, MASK mask) +{ +	bool handled = hasMouseCapture(); +	if(handled) +	{ +		S32 screen_x; +		S32 screen_y; +		localPointToScreen(x, y, &screen_x, &screen_y); + +		if(LLToolDragAndDrop::getInstance()->isOverThreshold(screen_x, screen_y)) +		{ +			// First, create the global drag and drop object +			std::vector<EDragAndDropType> types; +			uuid_vec_t cargo_ids; +			getSelectedUUIDs(cargo_ids); +			types.resize(cargo_ids.size(), DAD_PERSON); +			LLToolDragAndDrop::ESource src = LLToolDragAndDrop::SOURCE_PEOPLE; +			LLToolDragAndDrop::getInstance()->beginMultiDrag(types, cargo_ids, src); +		} +	} + +	if(!handled) +	{ +		handled = LLFlatListViewEx::handleHover(x, y, mask); +	} + +	return handled; +} +  bool LLAvatarList::isAvalineItemSelected()  {  	std::vector<LLPanel*> selected_items; diff --git a/indra/newview/llavatarlist.h b/indra/newview/llavatarlist.h index 4814a88a79..3542577ae3 100644 --- a/indra/newview/llavatarlist.h +++ b/indra/newview/llavatarlist.h @@ -84,6 +84,9 @@ public:  	bool getIconsVisible() const { return mShowIcons; }  	const std::string getIconParamName() const{return mIconParamName;}  	virtual BOOL handleRightMouseDown(S32 x, S32 y, MASK mask); +	/*virtual*/ BOOL handleMouseDown( S32 x, S32 y, MASK mask ); +	/*virtual*/ BOOL handleMouseUp(S32 x, S32 y, MASK mask); +	/*virtual*/ BOOL handleHover(S32 x, S32 y, MASK mask);  	// Return true if filter has at least one match.  	bool filterHasMatches(); diff --git a/indra/newview/llavatarlistitem.cpp b/indra/newview/llavatarlistitem.cpp index 3ed0c7c482..3e6c817dd6 100644 --- a/indra/newview/llavatarlistitem.cpp +++ b/indra/newview/llavatarlistitem.cpp @@ -368,61 +368,6 @@ BOOL LLAvatarListItem::handleDoubleClick(S32 x, S32 y, MASK mask)  	return LLPanel::handleDoubleClick(x, y, mask);  } -BOOL LLAvatarListItem::handleMouseDown(S32 x, S32 y, MASK mask) -{ -	if (LLUICtrl::handleMouseDown(x, y, mask)) -	{ -		return TRUE; -	} - -	gFocusMgr.setMouseCapture(this); - -	S32 screen_x; -	S32 screen_y; -	localPointToScreen(x, y, &screen_x, &screen_y); -	LLToolDragAndDrop::getInstance()->setDragStart(screen_x, screen_y); - -	return TRUE; -} - -BOOL LLAvatarListItem::handleMouseUp( S32 x, S32 y, MASK mask ) -{ -	if (LLUICtrl::childrenHandleMouseUp(x, y, mask)) -	{ -		return TRUE; -	} - -	if(hasMouseCapture()) -	{ -		gFocusMgr.setMouseCapture(NULL); -	} -	return TRUE; -} - -BOOL LLAvatarListItem::handleHover(S32 x, S32 y, MASK mask) -{ -	bool handled = hasMouseCapture(); -	if(handled) -	{ -		S32 screen_x; -		S32 screen_y; -		localPointToScreen(x, y, &screen_x, &screen_y); - -		if(LLToolDragAndDrop::getInstance()->isOverThreshold(screen_x, screen_y)) -		{ -			// First, create the global drag and drop object -			std::vector<EDragAndDropType> types; -			uuid_vec_t cargo_ids; -			types.push_back(DAD_PERSON); -			cargo_ids.push_back(mAvatarId); -			LLToolDragAndDrop::ESource src = LLToolDragAndDrop::SOURCE_PEOPLE; -			LLToolDragAndDrop::getInstance()->beginMultiDrag(types, cargo_ids, src); -		} -	} - -	return handled; -} -  void LLAvatarListItem::setValue( const LLSD& value )  {  	if (!value.isMap()) return;; diff --git a/indra/newview/llavatarlistitem.h b/indra/newview/llavatarlistitem.h index 96aed20016..7ef35a746e 100644 --- a/indra/newview/llavatarlistitem.h +++ b/indra/newview/llavatarlistitem.h @@ -115,9 +115,6 @@ public:  	void onProfileBtnClick();  	/*virtual*/ BOOL handleDoubleClick(S32 x, S32 y, MASK mask); -	/*virtual*/ BOOL handleMouseDown( S32 x, S32 y, MASK mask ); -	/*virtual*/ BOOL handleMouseUp(S32 x, S32 y, MASK mask); -	/*virtual*/ BOOL handleHover(S32 x, S32 y, MASK mask);  protected:  	/** diff --git a/indra/newview/llfloaterimsession.cpp b/indra/newview/llfloaterimsession.cpp index f754853b82..50b2ed8c51 100644 --- a/indra/newview/llfloaterimsession.cpp +++ b/indra/newview/llfloaterimsession.cpp @@ -1044,6 +1044,19 @@ void LLFloaterIMSession::processSessionUpdate(const LLSD& session_update)  }  // virtual +void LLFloaterIMSession::draw() +{ +	// add people who were added via dropPerson() +	if (!mPendingParticipants.empty()) +	{ +		addSessionParticipants(mPendingParticipants); +		mPendingParticipants.clear(); +	} + +	LLFloaterIMSessionTab::draw(); +} + +// virtual  BOOL LLFloaterIMSession::handleDragAndDrop(S32 x, S32 y, MASK mask, BOOL drop,  									EDragAndDropType cargo_type,  									void* cargo_data, @@ -1081,7 +1094,9 @@ bool LLFloaterIMSession::dropPerson(LLUUID* person_id, bool drop)  		res = canAddSelectedToChat(ids);  		if(res && drop)  		{ -			addSessionParticipants(ids); +			// these people will be added during the next draw() call +			// (so they can be added all at once) +			mPendingParticipants.push_back(*person_id);  		}  	} diff --git a/indra/newview/llfloaterimsession.h b/indra/newview/llfloaterimsession.h index e7fd6f9ff3..381b3cf721 100644 --- a/indra/newview/llfloaterimsession.h +++ b/indra/newview/llfloaterimsession.h @@ -69,6 +69,13 @@ public:  	/*virtual*/ BOOL getVisible();  	// Check typing timeout timer. +	/*virtual*/ void draw(); +	/*virtual*/ BOOL handleDragAndDrop(S32 x, S32 y, MASK mask, BOOL drop, +		EDragAndDropType cargo_type, +		void* cargo_data, +		EAcceptance* accept, +		std::string& tooltip_msg); +  	static LLFloaterIMSession* findInstance(const LLUUID& session_id);  	static LLFloaterIMSession* getInstance(const LLUUID& session_id); @@ -117,13 +124,6 @@ public:  	void processAgentListUpdates(const LLSD& body);  	void processSessionUpdate(const LLSD& session_update); -	/*virtual*/ BOOL handleDragAndDrop(S32 x, S32 y, MASK mask, BOOL drop, -									   EDragAndDropType cargo_type, -									   void* cargo_data, -									   EAcceptance* accept, -									   std::string& tooltip_msg); - -  	//used as a callback on receiving new IM message  	static void sRemoveTypingIndicator(const LLSD& data);  	static void onIMChicletCreated(const LLUUID& session_id); @@ -189,6 +189,7 @@ private:  	LLSD mQueuedMsgsForInit;  	uuid_vec_t mInvitedParticipants; +	uuid_vec_t mPendingParticipants;  	// connection to voice channel state change signal  	boost::signals2::connection mVoiceChannelStateChangeConnection; | 
