Pull and merge from ssh://stinson@hg.lindenlab.com/richard/viewer-chui/.
commit
5b827d58f6
|
|
@ -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;
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue