Pull and merge from ssh://stinson@hg.lindenlab.com/richard/viewer-chui/.

meow-7.2.2
William Todd Stinson 2012-12-12 14:24:09 -08:00
commit 5b827d58f6
1 changed files with 45 additions and 35 deletions

View File

@ -891,41 +891,46 @@ void LLFloaterIMContainer::getSelectedUUIDs(uuid_vec_t& selected_uuids)
const LLConversationItem * LLFloaterIMContainer::getCurSelectedViewModelItem()
{
LLConversationItem * conversationItem = NULL;
LLConversationItem * conversation_item = NULL;
if(mConversationsRoot &&
mConversationsRoot->getCurSelectedItem() &&
mConversationsRoot->getCurSelectedItem()->getViewModelItem())
{
LLFloaterIMSessionTab *selectedSession = LLFloaterIMSessionTab::getConversation(mSelectedSession);
if (selectedSession && selectedSession->isTornOff())
LLFloaterIMSessionTab *selected_session_floater = LLFloaterIMSessionTab::getConversation(mSelectedSession);
if (selected_session_floater && !selected_session_floater->getHost())
{
conversationItem = selectedSession->getCurSelectedViewModelItem();
conversation_item = selected_session_floater->getCurSelectedViewModelItem();
}
else
{
conversationItem = static_cast<LLConversationItem *>(mConversationsRoot->getCurSelectedItem()->getViewModelItem());
conversation_item = static_cast<LLConversationItem *>(mConversationsRoot->getCurSelectedItem()->getViewModelItem());
}
}
return conversationItem;
return conversation_item;
}
void LLFloaterIMContainer::getParticipantUUIDs(uuid_vec_t& selected_uuids)
{
//Find the conversation floater associated with the selected id
const LLConversationItem * conversationItem = getCurSelectedViewModelItem();
const LLConversationItem * conversation_item = getCurSelectedViewModelItem();
if(conversationItem->getType() == LLConversationItem::CONV_PARTICIPANT)
if (NULL == conversation_item)
{
return;
}
if (conversation_item->getType() == LLConversationItem::CONV_PARTICIPANT)
{
getSelectedUUIDs(selected_uuids);
}
//When a one-on-one conversation exists, retrieve the participant id from the conversation floater
else if(conversationItem->getType() == LLConversationItem::CONV_SESSION_1_ON_1)
else if(conversation_item->getType() == LLConversationItem::CONV_SESSION_1_ON_1)
{
LLFloaterIMSession *conversationFloater = LLFloaterIMSession::findInstance(conversationItem->getUUID());
LLUUID participantID = conversationFloater->getOtherParticipantUUID();
selected_uuids.push_back(participantID);
LLFloaterIMSession * conversation_floaterp = LLFloaterIMSession::findInstance(conversation_item->getUUID());
LLUUID participant_id = conversation_floaterp->getOtherParticipantUUID();
selected_uuids.push_back(participant_id);
}
}
@ -1234,13 +1239,13 @@ void LLFloaterIMContainer::showConversation(const LLUUID& session_id)
void LLFloaterIMContainer::selectConversation(const LLUUID& session_id)
{
selectConversationPair(session_id, true);
}
}
// Synchronous select the conversation item and the conversation floater
BOOL LLFloaterIMContainer::selectConversationPair(const LLUUID& session_id, bool select_widget)
{
BOOL handled = TRUE;
LLFloaterIMSessionTab* session_floater = LLFloaterIMSessionTab::getConversation(session_id);
LLFloaterIMSessionTab* session_floater = LLFloaterIMSessionTab::findConversation(session_id);
/* widget processing */
if (select_widget)
@ -1254,26 +1259,29 @@ BOOL LLFloaterIMContainer::selectConversationPair(const LLUUID& session_id, bool
/* floater processing */
if (session_id != getSelectedSession())
{
// Store the active session
setSelectedSession(session_id);
if (NULL != session_floater)
{
if (session_id != getSelectedSession())
{
// Store the active session
setSelectedSession(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);
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);
// Set the focus on the selected floater
if (!session_floater->hasFocus())
{
session_floater->setFocus(TRUE);
}
}
return handled;
@ -1383,12 +1391,14 @@ LLConversationItem* LLFloaterIMContainer::addConversationListItem(const LLUUID&
// set the widget to minimized mode if conversations pane is collapsed
widget->toggleCollapsedMode(mConversationsPane->isCollapsed());
if (isWidgetSelected)
{
selectConversation(uuid);
// scroll to newly added item
mConversationsRoot->scrollToShowSelection();
}
if (isWidgetSelected || 0 == mConversationsRoot->getSelectedCount())
{
selectConversationPair(uuid, true);
widget->requestArrange();
// scroll to newly added item
mConversationsRoot->scrollToShowSelection();
}
return item;
}