merging
commit
4c3510bc4e
|
|
@ -286,7 +286,7 @@ LLButton::~LLButton()
|
|||
|
||||
if (mFlashingTimer)
|
||||
{
|
||||
delete mFlashingTimer;
|
||||
mFlashingTimer->unset();
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -35,6 +35,7 @@ LLFlashTimer::LLFlashTimer(callback_t cb, S32 count, F32 period)
|
|||
, mCurrentTickCount(0)
|
||||
, mIsFlashingInProgress(false)
|
||||
, mIsCurrentlyHighlighted(false)
|
||||
, mUnset(false)
|
||||
{
|
||||
mEventTimer.stop();
|
||||
|
||||
|
|
@ -48,6 +49,12 @@ LLFlashTimer::LLFlashTimer(callback_t cb, S32 count, F32 period)
|
|||
}
|
||||
}
|
||||
|
||||
void LLFlashTimer::unset()
|
||||
{
|
||||
mUnset = true;
|
||||
mCallback = NULL;
|
||||
}
|
||||
|
||||
BOOL LLFlashTimer::tick()
|
||||
{
|
||||
mIsCurrentlyHighlighted = !mIsCurrentlyHighlighted;
|
||||
|
|
@ -62,7 +69,7 @@ BOOL LLFlashTimer::tick()
|
|||
stopFlashing();
|
||||
}
|
||||
|
||||
return FALSE;
|
||||
return mUnset;
|
||||
}
|
||||
|
||||
void LLFlashTimer::startFlashing()
|
||||
|
|
|
|||
|
|
@ -52,6 +52,11 @@ public:
|
|||
|
||||
bool isFlashingInProgress();
|
||||
bool isCurrentlyHighlighted();
|
||||
/*
|
||||
* Use this instead of deleting this object.
|
||||
* The next call to tick() will return true and that will destroy this object.
|
||||
*/
|
||||
void unset();
|
||||
|
||||
private:
|
||||
callback_t mCallback;
|
||||
|
|
@ -62,6 +67,7 @@ private:
|
|||
S32 mCurrentTickCount;
|
||||
bool mIsCurrentlyHighlighted;
|
||||
bool mIsFlashingInProgress;
|
||||
bool mUnset;
|
||||
};
|
||||
|
||||
#endif /* LL_FLASHTIMER_H */
|
||||
|
|
|
|||
|
|
@ -501,7 +501,7 @@ BOOL LLFolderViewItem::handleMouseDown( S32 x, S32 y, MASK mask )
|
|||
// No handler needed for focus lost since this class has no
|
||||
// state that depends on it.
|
||||
gFocusMgr.setMouseCapture( this );
|
||||
|
||||
|
||||
if (!mIsSelected)
|
||||
{
|
||||
if(mask & MASK_CONTROL)
|
||||
|
|
@ -518,6 +518,11 @@ BOOL LLFolderViewItem::handleMouseDown( S32 x, S32 y, MASK mask )
|
|||
}
|
||||
make_ui_sound("UISndClick");
|
||||
}
|
||||
//Just re-select the item since it is clicked without ctrl or shift
|
||||
else if(!(mask & (MASK_CONTROL | MASK_SHIFT)))
|
||||
{
|
||||
getRoot()->setSelection(this, FALSE);
|
||||
}
|
||||
else
|
||||
{
|
||||
mSelectPending = TRUE;
|
||||
|
|
|
|||
|
|
@ -95,7 +95,7 @@ LLConversationViewSession::~LLConversationViewSession()
|
|||
LLVoiceClient::getInstance()->removeObserver(mVoiceClientObserver);
|
||||
}
|
||||
|
||||
delete mFlashTimer;
|
||||
mFlashTimer->unset();
|
||||
}
|
||||
|
||||
bool LLConversationViewSession::isHighlightAllowed()
|
||||
|
|
@ -218,9 +218,15 @@ BOOL LLConversationViewSession::handleMouseDown( S32 x, S32 y, MASK mask )
|
|||
{
|
||||
LLConversationItem* item = dynamic_cast<LLConversationItem *>(getViewModelItem());
|
||||
LLUUID session_id = item? item->getUUID() : LLUUID();
|
||||
//Will try to select a child node and then itself (if a child was not selected)
|
||||
BOOL result = LLFolderViewFolder::handleMouseDown(x, y, mask);
|
||||
(LLFloaterReg::getTypedInstance<LLFloaterIMContainer>("im_container"))->
|
||||
selectConversationPair(session_id, false);
|
||||
|
||||
//This node (conversation) was selected and a child (participant) was not
|
||||
if(result && getRoot()->getCurSelectedItem() == this)
|
||||
{
|
||||
(LLFloaterReg::getTypedInstance<LLFloaterIMContainer>("im_container"))->
|
||||
selectConversationPair(session_id, false);
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
|
@ -549,8 +555,12 @@ BOOL LLConversationViewParticipant::handleMouseDown( S32 x, S32 y, MASK mask )
|
|||
}
|
||||
LLUUID session_id = item? item->getUUID() : LLUUID();
|
||||
BOOL result = LLFolderViewItem::handleMouseDown(x, y, mask);
|
||||
(LLFloaterReg::getTypedInstance<LLFloaterIMContainer>("im_container"))->
|
||||
selectConversationPair(session_id, false);
|
||||
|
||||
if(result)
|
||||
{
|
||||
(LLFloaterReg::getTypedInstance<LLFloaterIMContainer>("im_container"))->
|
||||
selectConversationPair(session_id, false);
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1165,21 +1165,16 @@ void LLFloaterIMContainer::showConversation(const LLUUID& session_id)
|
|||
selectConversation(session_id);
|
||||
}
|
||||
|
||||
// Will select only the conversation item
|
||||
void LLFloaterIMContainer::selectConversation(const LLUUID& session_id)
|
||||
{
|
||||
LLFolderViewItem* widget = get_ptr_in_map(mConversationsWidgets,session_id);
|
||||
if (widget)
|
||||
{
|
||||
(widget->getRoot())->setSelection(widget, FALSE, FALSE);
|
||||
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);
|
||||
|
||||
/* widget processing */
|
||||
if (select_widget)
|
||||
|
|
@ -1198,7 +1193,7 @@ BOOL LLFloaterIMContainer::selectConversationPair(const LLUUID& session_id, bool
|
|||
// Store the active session
|
||||
setSelectedSession(session_id);
|
||||
|
||||
LLFloaterIMSessionTab* session_floater = LLFloaterIMSessionTab::getConversation(session_id);
|
||||
|
||||
|
||||
if (session_floater->getHost())
|
||||
{
|
||||
|
|
@ -1207,13 +1202,13 @@ BOOL LLFloaterIMContainer::selectConversationPair(const LLUUID& session_id, bool
|
|||
// 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;
|
||||
}
|
||||
|
|
@ -1627,13 +1622,26 @@ void LLFloaterIMContainer::reSelectConversation()
|
|||
|
||||
void LLFloaterIMContainer::flashConversationItemWidget(const LLUUID& session_id, bool is_flashes)
|
||||
{
|
||||
//Finds the conversation line item to flash using the session_id
|
||||
LLConversationViewSession * widget = dynamic_cast<LLConversationViewSession *>(get_ptr_in_map(mConversationsWidgets,session_id));
|
||||
LLFloaterIMSessionTab* session_floater = LLFloaterIMSessionTab::getConversation(session_id);
|
||||
|
||||
if (widget)
|
||||
{
|
||||
//Start flash
|
||||
if (is_flashes)
|
||||
{
|
||||
//Only flash when conversation is not active
|
||||
if(session_floater
|
||||
&& (!session_floater->isInVisibleChain()) //conversation floater not displayed
|
||||
||
|
||||
(session_floater->isInVisibleChain() && session_floater->hasFocus() == false)) //conversation floater is displayed but doesn't have focus
|
||||
|
||||
{
|
||||
widget->getFlashTimer()->startFlashing();
|
||||
}
|
||||
}
|
||||
//Stop flash
|
||||
else
|
||||
{
|
||||
widget->getFlashTimer()->stopFlashing();
|
||||
|
|
|
|||
|
|
@ -619,11 +619,6 @@ void LLFloaterIMNearbyChatHandler::processChat(const LLChat& chat_msg,
|
|||
chat["message"] = toast_msg;
|
||||
channel->addChat(chat);
|
||||
}
|
||||
//Will show Conversations floater when chat preference is set
|
||||
else if(gSavedSettings.getString("NotificationNearbyChatOptions") == "openconversations")
|
||||
{
|
||||
LLFloaterReg::showInstance("im_container");
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -306,7 +306,7 @@ void LLFloaterIMSessionTab::onFocusReceived()
|
|||
LLFloaterIMContainer* container = LLFloaterReg::getTypedInstance<LLFloaterIMContainer>("im_container");
|
||||
if (container)
|
||||
{
|
||||
container->selectConversationPair(mSessionID, true);
|
||||
container->selectConversationPair(mSessionID, ! getHost());
|
||||
container->showStub(! getHost());
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -191,6 +191,12 @@ void on_new_message(const LLSD& msg)
|
|||
}
|
||||
else if("openconversations" == action)
|
||||
{
|
||||
LLFloaterIMContainer* im_box = LLFloaterReg::getTypedInstance<LLFloaterIMContainer>("im_container");
|
||||
if (im_box)
|
||||
{
|
||||
im_box->flashConversationItemWidget(session_id, true); // flashing of the conversation's item
|
||||
}
|
||||
|
||||
LLFloaterReg::showInstance("im_container");
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -3400,7 +3400,7 @@ If you continue to receive this message, contact the [SUPPORT_SITE].
|
|||
Connecting...
|
||||
</string>
|
||||
<string name="conference-title">
|
||||
Ad-hoc Conference
|
||||
Multi-person chat
|
||||
</string>
|
||||
<string name="conference-title-incoming">
|
||||
Conference with [AGENT_NAME]
|
||||
|
|
|
|||
Loading…
Reference in New Issue