merge storm-192
commit
b92ca367ae
|
|
@ -64,7 +64,7 @@ public:
|
|||
typedef boost::function<LLToastPanelBase* (void )> create_toast_panel_callback_t;
|
||||
void setCreatePanelCallback(create_toast_panel_callback_t value) { m_create_toast_panel_callback_t = value;}
|
||||
|
||||
void onToastDestroyed (LLToast* toast);
|
||||
void onToastDestroyed (LLToast* toast, bool app_quitting);
|
||||
void onToastFade (LLToast* toast);
|
||||
|
||||
void reshape (S32 width, S32 height, BOOL called_from_parent);
|
||||
|
|
@ -96,6 +96,7 @@ public:
|
|||
}
|
||||
|
||||
protected:
|
||||
void deactivateToast(LLToast* toast);
|
||||
void addToToastPool(LLToast* toast)
|
||||
{
|
||||
toast->setVisible(FALSE);
|
||||
|
|
@ -116,14 +117,65 @@ protected:
|
|||
bool mStopProcessing;
|
||||
};
|
||||
|
||||
//-----------------------------------------------------------------------------------------------
|
||||
// LLNearbyChatToast
|
||||
//-----------------------------------------------------------------------------------------------
|
||||
|
||||
// We're deriving from LLToast to be able to override onClose()
|
||||
// in order to handle closing nearby chat toasts properly.
|
||||
class LLNearbyChatToast : public LLToast
|
||||
{
|
||||
LOG_CLASS(LLNearbyChatToast);
|
||||
public:
|
||||
LLNearbyChatToast(const LLToast::Params& p, LLNearbyChatScreenChannel* nc_channelp)
|
||||
: LLToast(p),
|
||||
mNearbyChatScreenChannelp(nc_channelp)
|
||||
{
|
||||
}
|
||||
|
||||
/*virtual*/ void onClose(bool app_quitting);
|
||||
|
||||
private:
|
||||
LLNearbyChatScreenChannel* mNearbyChatScreenChannelp;
|
||||
};
|
||||
|
||||
//-----------------------------------------------------------------------------------------------
|
||||
// LLNearbyChatScreenChannel
|
||||
//-----------------------------------------------------------------------------------------------
|
||||
|
||||
void LLNearbyChatScreenChannel::deactivateToast(LLToast* toast)
|
||||
{
|
||||
std::vector<LLToast*>::iterator pos = std::find(m_active_toasts.begin(), m_active_toasts.end(), toast);
|
||||
|
||||
if (pos == m_active_toasts.end())
|
||||
{
|
||||
llassert(pos == m_active_toasts.end());
|
||||
return;
|
||||
}
|
||||
|
||||
m_active_toasts.erase(pos);
|
||||
}
|
||||
|
||||
void LLNearbyChatScreenChannel::createOverflowToast(S32 bottom, F32 timer)
|
||||
{
|
||||
//we don't need overflow toast in nearby chat
|
||||
}
|
||||
|
||||
void LLNearbyChatScreenChannel::onToastDestroyed(LLToast* toast)
|
||||
void LLNearbyChatScreenChannel::onToastDestroyed(LLToast* toast, bool app_quitting)
|
||||
{
|
||||
mStopProcessing = true;
|
||||
if (app_quitting)
|
||||
{
|
||||
// Viewer is quitting.
|
||||
// Immediately stop processing chat messages (EXT-1419).
|
||||
mStopProcessing = true;
|
||||
}
|
||||
else
|
||||
{
|
||||
// The toast is being closed by user (STORM-192).
|
||||
// Remove it from the list of active toasts to prevent
|
||||
// further references to the invalid pointer.
|
||||
deactivateToast(toast);
|
||||
}
|
||||
}
|
||||
|
||||
void LLNearbyChatScreenChannel::onToastFade(LLToast* toast)
|
||||
|
|
@ -132,9 +184,7 @@ void LLNearbyChatScreenChannel::onToastFade(LLToast* toast)
|
|||
if(!toast)
|
||||
return;
|
||||
|
||||
std::vector<LLToast*>::iterator pos = std::find(m_active_toasts.begin(),m_active_toasts.end(),toast);
|
||||
if(pos!=m_active_toasts.end())
|
||||
m_active_toasts.erase(pos);
|
||||
deactivateToast(toast);
|
||||
|
||||
addToToastPool(toast);
|
||||
|
||||
|
|
@ -153,11 +203,10 @@ bool LLNearbyChatScreenChannel::createPoolToast()
|
|||
p.lifetime_secs = gSavedSettings.getS32("NearbyToastLifeTime");
|
||||
p.fading_time_secs = gSavedSettings.getS32("NearbyToastFadingTime");
|
||||
|
||||
LLToast* toast = new LLToast(p);
|
||||
LLToast* toast = new LLNearbyChatToast(p, this);
|
||||
|
||||
|
||||
toast->setOnFadeCallback(boost::bind(&LLNearbyChatScreenChannel::onToastFade, this, _1));
|
||||
toast->setOnToastDestroyedCallback(boost::bind(&LLNearbyChatScreenChannel::onToastDestroyed, this, _1));
|
||||
|
||||
m_toast_pool.push_back(toast);
|
||||
return true;
|
||||
|
|
@ -452,4 +501,14 @@ void LLNearbyChatHandler::onDeleteToast(LLToast* toast)
|
|||
}
|
||||
|
||||
|
||||
//-----------------------------------------------------------------------------------------------
|
||||
// LLNearbyChatToast
|
||||
//-----------------------------------------------------------------------------------------------
|
||||
|
||||
// virtual
|
||||
void LLNearbyChatToast::onClose(bool app_quitting)
|
||||
{
|
||||
mNearbyChatScreenChannelp->onToastDestroyed(this, app_quitting);
|
||||
}
|
||||
|
||||
// EOF
|
||||
|
|
|
|||
Loading…
Reference in New Issue