diff options
| author | AlexanderP ProductEngine <apaschenko@productengine.com> | 2012-11-07 18:45:02 +0200 | 
|---|---|---|
| committer | AlexanderP ProductEngine <apaschenko@productengine.com> | 2012-11-07 18:45:02 +0200 | 
| commit | d1f45654d91762af4e614de2156304d7acad6619 (patch) | |
| tree | acbbebef1b08dbf955c0c3aa0ce93ce11d615e32 | |
| parent | bfb22638f865c2270fad95c35eff273b134772e3 (diff) | |
CHUI-473, CHUI-482 FIXED (Clicking on nearby chat toast to open Conversation floater does not show Nearby Chat conversation selected in list; Nearby chat conversation is not selected in list by default when it is the only conversation ): implement. new logic in LLIMFloaterContainer for the syncronous select the conv. list's item and corresponding convers. floater; removed floater selecting from conv. items; fixed bug with item select
| -rwxr-xr-x | indra/llui/llfolderviewitem.cpp | 2 | ||||
| -rwxr-xr-x | indra/newview/llconversationview.cpp | 76 | ||||
| -rwxr-xr-x | indra/newview/llconversationview.h | 6 | ||||
| -rw-r--r-- | indra/newview/llimconversation.cpp | 23 | ||||
| -rw-r--r-- | indra/newview/llimconversation.h | 2 | ||||
| -rw-r--r-- | indra/newview/llimfloater.cpp | 13 | ||||
| -rw-r--r-- | indra/newview/llimfloater.h | 3 | ||||
| -rw-r--r-- | indra/newview/llimfloatercontainer.cpp | 41 | ||||
| -rw-r--r-- | indra/newview/llimfloatercontainer.h | 2 | ||||
| -rw-r--r-- | indra/newview/llnearbychat.cpp | 18 | ||||
| -rw-r--r-- | indra/newview/llnearbychat.h | 1 | 
11 files changed, 107 insertions, 80 deletions
| diff --git a/indra/llui/llfolderviewitem.cpp b/indra/llui/llfolderviewitem.cpp index 7c63cad1b7..21fb9bff90 100755 --- a/indra/llui/llfolderviewitem.cpp +++ b/indra/llui/llfolderviewitem.cpp @@ -410,8 +410,8 @@ void LLFolderViewItem::selectItem(void)  {  	if (mIsSelected == FALSE)  	{ -		getViewModelItem()->selectItem();  		mIsSelected = TRUE; +		getViewModelItem()->selectItem();  	}  } diff --git a/indra/newview/llconversationview.cpp b/indra/newview/llconversationview.cpp index 2d3a008bf4..34b5976e3e 100755 --- a/indra/newview/llconversationview.cpp +++ b/indra/newview/llconversationview.cpp @@ -203,6 +203,17 @@ void LLConversationViewSession::draw()  	LLView::draw();  } +BOOL LLConversationViewSession::handleMouseDown( S32 x, S32 y, MASK mask ) +{ +	LLConversationItem* item = dynamic_cast<LLConversationItem *>(getViewModelItem()); +    LLUUID session_id = item? item->getUUID() : LLUUID(); + +	(LLFloaterReg::getTypedInstance<LLIMFloaterContainer>("im_container"))-> +    		selectConversationPair(session_id, false); + +	return LLFolderViewFolder::handleMouseDown(x, y, mask); +} +  // virtual  S32 LLConversationViewSession::arrange(S32* width, S32* height)  { @@ -233,29 +244,6 @@ void LLConversationViewSession::toggleOpen()  	}  } -void LLConversationViewSession::selectItem() -{ -	 -	LLConversationItem* item = dynamic_cast<LLConversationItem*>(mViewModelItem); -	LLFloater* session_floater = LLIMConversation::getConversation(item->getUUID()); -	LLMultiFloater* host_floater = session_floater->getHost(); -	 -	if (host_floater == mContainer) -	{ -		// Always expand the message pane if the panel is hosted by the container -		mContainer->collapseMessagesPane(false); -		// Switch to the conversation floater that is being selected -		mContainer->selectFloater(session_floater); -	} -	 -	// Set the focus on the selected floater -	session_floater->setFocus(TRUE); -    // Store the active session -    LLIMFloaterContainer::getInstance()->setSelectedSession(item->getUUID()); - - -	LLFolderViewItem::selectItem(); -}  void LLConversationViewSession::toggleMinimizedMode(bool is_minimized)  { @@ -441,31 +429,6 @@ void LLConversationViewParticipant::draw()      LLView::draw();  } -void LLConversationViewParticipant::selectItem() -{ -    LLConversationItem* vmi = this->getParentFolder() ? static_cast<LLConversationItem*>(this->getParentFolder()->getViewModelItem()) : NULL; -    LLIMFloaterContainer* container = LLIMFloaterContainer::getInstance(); -    LLFloater* session_floater; - -    if(vmi) -    { -        session_floater = LLIMConversation::getConversation(vmi->getUUID()); - -        //Only execute when switching floaters (conversations) -        if(vmi->getUUID() != container->getSelectedSession()) -        { -            container->selectFloater(session_floater); -            // Store the active session -            container->setSelectedSession(vmi->getUUID()); -        } - -        //Redirect focus to the conversation floater -        session_floater->setFocus(TRUE); -    } - -    LLFolderViewItem::selectItem(); -} -  void LLConversationViewParticipant::refresh()  {  	// Refresh the participant view from its model data @@ -514,6 +477,23 @@ void LLConversationViewParticipant::onMouseLeave(S32 x, S32 y, MASK mask)      LLFolderViewItem::onMouseLeave(x, y, mask);  } +BOOL LLConversationViewParticipant::handleMouseDown( S32 x, S32 y, MASK mask ) +{ +	LLConversationItem* item = NULL; +	LLConversationViewSession* session_widget = +			dynamic_cast<LLConversationViewSession *>(this->getParentFolder()); +	if (session_widget) +	{ +	    item = dynamic_cast<LLConversationItem*>(session_widget->getViewModelItem()); +	} +    LLUUID session_id = item? item->getUUID() : LLUUID(); + +	(LLFloaterReg::getTypedInstance<LLIMFloaterContainer>("im_container"))-> +    		selectConversationPair(session_id, false); + +	return LLFolderViewItem::handleMouseDown(x, y, mask); +} +  S32 LLConversationViewParticipant::getLabelXPos()  {      return mAvatarIcon->getRect().mRight + mIconPad; diff --git a/indra/newview/llconversationview.h b/indra/newview/llconversationview.h index aeca747260..ac91d2d26f 100755 --- a/indra/newview/llconversationview.h +++ b/indra/newview/llconversationview.h @@ -60,10 +60,10 @@ protected:  public:  	virtual ~LLConversationViewSession(); -	virtual void selectItem();	  	/*virtual*/ BOOL postBuild();  	/*virtual*/ void draw(); +	/*virtual*/ BOOL handleMouseDown( S32 x, S32 y, MASK mask );  	/*virtual*/ S32 arrange(S32* width, S32* height); @@ -117,11 +117,13 @@ public:  	};      virtual ~LLConversationViewParticipant( void ) { } -    void selectItem();	 +      bool hasSameValue(const LLUUID& uuid) { return (uuid == mUUID); }      virtual void refresh();      void addToFolder(LLFolderViewFolder* folder); +    /*virtual*/ BOOL handleMouseDown( S32 x, S32 y, MASK mask ); +      void onMouseEnter(S32 x, S32 y, MASK mask);      void onMouseLeave(S32 x, S32 y, MASK mask); diff --git a/indra/newview/llimconversation.cpp b/indra/newview/llimconversation.cpp index 833feff3c4..827059513f 100644 --- a/indra/newview/llimconversation.cpp +++ b/indra/newview/llimconversation.cpp @@ -128,6 +128,22 @@ void LLIMConversation::setVisible(BOOL visible)      setFocus(visible);  } +/*virtual*/ +void LLIMConversation::setFocus(BOOL focus) +{ +	LLTransientDockableFloater::setFocus(focus); + +    //Redirect focus to input editor +    if (focus) +	{ +    	updateMessages(); + +        if (mInputEditor) +        { +    	    mInputEditor->setFocus(TRUE); +        } +	} +}  void LLIMConversation::addToHost(const LLUUID& session_id) @@ -247,7 +263,6 @@ void LLIMConversation::enableDisableCallBtn()      		&& mSession->mCallBackEnabled);  } -  void LLIMConversation::onFocusReceived()  {  	setBackgroundOpaque(true); @@ -258,6 +273,12 @@ void LLIMConversation::onFocusReceived()  	}  	LLTransientDockableFloater::onFocusReceived(); + +	LLIMFloaterContainer* container = LLFloaterReg::getTypedInstance<LLIMFloaterContainer>("im_container"); +	if (container) +	{ +		container->selectConversationPair(mSessionID, true); +	}  }  void LLIMConversation::onFocusLost() diff --git a/indra/newview/llimconversation.h b/indra/newview/llimconversation.h index bff4cb4a31..d1e2bfff55 100644 --- a/indra/newview/llimconversation.h +++ b/indra/newview/llimconversation.h @@ -79,7 +79,9 @@ public:  	/*virtual*/ BOOL postBuild();  	/*virtual*/ void draw();  	/*virtual*/ void setVisible(BOOL visible); +	/*virtual*/ void setFocus(BOOL focus); +	virtual void updateMessages() {}  protected: diff --git a/indra/newview/llimfloater.cpp b/indra/newview/llimfloater.cpp index 3545b8ff18..2ff883da67 100644 --- a/indra/newview/llimfloater.cpp +++ b/indra/newview/llimfloater.cpp @@ -671,19 +671,6 @@ void LLIMFloater::setDocked(bool docked, bool pop_on_undock)  	}  } -void LLIMFloater::setFocus(BOOL focusFlag) -{ -    LLTransientDockableFloater::setFocus(focusFlag); - -    //Redirect focus to input editor -    if (focusFlag) -    { -        updateMessages(); -        mInputEditor->setFocus(TRUE); -    } -     -} -  void LLIMFloater::setVisible(BOOL visible)  {  	LLNotificationsUI::LLScreenChannel* channel = static_cast<LLNotificationsUI::LLScreenChannel*> diff --git a/indra/newview/llimfloater.h b/indra/newview/llimfloater.h index 6c69ed3462..1fae3cff50 100644 --- a/indra/newview/llimfloater.h +++ b/indra/newview/llimfloater.h @@ -65,7 +65,6 @@ public:  	// LLView overrides  	/*virtual*/ BOOL postBuild(); -    /*virtual*/ void setFocus(BOOL focusFlag);  	/*virtual*/ void setVisible(BOOL visible);  	/*virtual*/ BOOL getVisible();  	// Check typing timeout timer. @@ -86,7 +85,7 @@ public:  	void sessionInitReplyReceived(const LLUUID& im_session_id);  	// get new messages from LLIMModel -	void updateMessages(); +	/*virtual*/ void updateMessages();  	void reloadMessages();  	static void onSendMsg(LLUICtrl*, void*);  	void sendMsgFromInputEditor(); diff --git a/indra/newview/llimfloatercontainer.cpp b/indra/newview/llimfloatercontainer.cpp index af43b1ac38..c2ad94c423 100644 --- a/indra/newview/llimfloatercontainer.cpp +++ b/indra/newview/llimfloatercontainer.cpp @@ -1091,6 +1091,47 @@ void LLIMFloaterContainer::selectConversation(const LLUUID& session_id)  	}  } +// Synchronous select the conversation item and the conversation floater +BOOL LLIMFloaterContainer::selectConversationPair(const LLUUID& session_id, bool select_widget) +{ +    BOOL handled = TRUE; + +    /* widget processing */ +    if (select_widget) +    { +    	LLFolderViewItem* widget = mConversationsWidgets[session_id]; +    	if (widget && widget->getParentFolder()) +    	{ +    		widget->getParentFolder()->setSelection(widget, FALSE, FALSE); +    	} +    } + +    /* floater processing */ + +    if (session_id != getSelectedSession()) +    { +        // Store the active session +        setSelectedSession(session_id); + +		LLIMConversation* session_floater = LLIMConversation::getConversation(session_id); + +		if (session_floater->getHost()) +		{ +			// Always expand the message pane if the panel is hosted by the container +			collapseMessagesPane(false); +			// Switch to the conversation floater that is being selected +			selectFloater(session_floater); +		} + +		// Set the focus on the selected floater +		if (!session_floater->hasFocus()) +		{ +			session_floater->setFocus(TRUE); +		} +    } + +    return handled; +}  void LLIMFloaterContainer::setTimeNow(const LLUUID& session_id, const LLUUID& participant_id)  { diff --git a/indra/newview/llimfloatercontainer.h b/indra/newview/llimfloatercontainer.h index 05ea94019b..25387fe83b 100644 --- a/indra/newview/llimfloatercontainer.h +++ b/indra/newview/llimfloatercontainer.h @@ -68,6 +68,8 @@ public:      void showConversation(const LLUUID& session_id);      void selectConversation(const LLUUID& session_id); +    BOOL selectConversationPair(const LLUUID& session_id, bool select_widget); +  	/*virtual*/ void tabClose();  	static LLFloater* getCurrentVoiceFloater(); diff --git a/indra/newview/llnearbychat.cpp b/indra/newview/llnearbychat.cpp index d1c7c6bfd7..a30d8b685e 100644 --- a/indra/newview/llnearbychat.cpp +++ b/indra/newview/llnearbychat.cpp @@ -195,8 +195,13 @@ BOOL	LLNearbyChat::handleMouseDown(S32 x, S32 y, MASK mask)  	//background opaque. This all happenn since NearByChat is "chrome" and didn't process focus change.  	if(mChatHistory) +	{  		mChatHistory->setFocus(TRUE); -	return LLPanel::handleMouseDown(x, y, mask); +	} + +	BOOL handled = LLPanel::handleMouseDown(x, y, mask); +	setFocus(handled); +	return handled;  }  void LLNearbyChat::reloadMessages() @@ -270,17 +275,6 @@ void LLNearbyChat::removeScreenChat()  	}  } -void LLNearbyChat::setFocus(BOOL focusFlag) -{ -    LLTransientDockableFloater::setFocus(focusFlag); -     -    //Redirect focus to input editor -    if (focusFlag) -    { -        mInputEditor->setFocus(TRUE); -    } -     -}  void LLNearbyChat::setVisible(BOOL visible)  { diff --git a/indra/newview/llnearbychat.h b/indra/newview/llnearbychat.h index b155fd3c26..11346a313c 100644 --- a/indra/newview/llnearbychat.h +++ b/indra/newview/llnearbychat.h @@ -52,7 +52,6 @@ public:  	/*virtual*/ BOOL postBuild();  	/*virtual*/ void onOpen(const LLSD& key); -    /*virtual*/ void setFocus(BOOL focusFlag);  	/*virtual*/ void setVisible(BOOL visible);  	void loadHistory(); | 
