summaryrefslogtreecommitdiff
path: root/indra/newview/llchiclet.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'indra/newview/llchiclet.cpp')
-rw-r--r--indra/newview/llchiclet.cpp45
1 files changed, 29 insertions, 16 deletions
diff --git a/indra/newview/llchiclet.cpp b/indra/newview/llchiclet.cpp
index 3000209aad..a661808d1f 100644
--- a/indra/newview/llchiclet.cpp
+++ b/indra/newview/llchiclet.cpp
@@ -29,7 +29,7 @@
#include "llagent.h"
#include "llavataractions.h"
-#include "llbottomtray.h"
+#include "llchicletbar.h"
#include "lleventtimer.h"
#include "llgroupactions.h"
#include "lliconctrl.h"
@@ -126,9 +126,9 @@ LLSysWellChiclet::Params::Params()
, unread_notifications("unread_notifications")
, max_displayed_count("max_displayed_count", 99)
{
- button.name("button");
- button.tab_stop(FALSE);
- button.label(LLStringUtil::null);
+ button.name = "button";
+ button.tab_stop = FALSE;
+ button.label = LLStringUtil::null;
}
LLSysWellChiclet::LLSysWellChiclet(const Params& p)
@@ -214,10 +214,10 @@ void LLSysWellChiclet::updateWidget(bool is_window_empty)
{
mButton->setEnabled(!is_window_empty);
- LLSD params;
- params["well_empty"] = is_window_empty;
- params["well_name"] = getName();
- notifyParent(params);
+ if (LLChicletBar::instanceExists())
+ {
+ LLChicletBar::getInstance()->showWellButton(getName(), !is_window_empty);
+ }
}
// virtual
BOOL LLSysWellChiclet::handleRightMouseDown(S32 x, S32 y, MASK mask)
@@ -250,6 +250,12 @@ LLIMWellChiclet::LLIMWellChiclet(const Params& p)
LLIMWellChiclet::~LLIMWellChiclet()
{
+ LLIMWellWindow* im_well_window = LLIMWellWindow::findInstance();
+ if (im_well_window)
+ {
+ im_well_window->setSysWellChiclet(NULL);
+ }
+
LLIMMgr::getInstance()->removeSessionObserver(this);
}
@@ -296,8 +302,15 @@ void LLIMWellChiclet::createMenu()
void LLIMWellChiclet::messageCountChanged(const LLSD& session_data)
{
+ // The singleton class LLChicletBar instance might be already deleted
+ // so don't create a new one.
+ if (!LLChicletBar::instanceExists())
+ {
+ return;
+ }
+
const LLUUID& session_id = session_data["session_id"];
- const S32 counter = LLBottomTray::getInstance()->getTotalUnreadIMCount();
+ const S32 counter = LLChicletBar::getInstance()->getTotalUnreadIMCount();
const bool im_not_visible = !LLFloaterReg::instanceVisible("im_container")
&& !LLFloaterReg::instanceVisible("impanel", session_id);
@@ -1100,8 +1113,8 @@ LLChicletPanel::~LLChicletPanel()
}
}
-void im_chiclet_callback(LLChicletPanel* panel, const LLSD& data){
-
+void LLChicletPanel::onMessageCountChanged(const LLSD& data)
+{
LLUUID session_id = data["session_id"].asUUID();
S32 unread = data["participant_unread"].asInteger();
@@ -1126,7 +1139,7 @@ void im_chiclet_callback(LLChicletPanel* panel, const LLSD& data){
}
}
-void object_chiclet_callback(const LLSD& data)
+void LLChicletPanel::objectChicletCallback(const LLSD& data)
{
LLUUID notification_id = data["notification_id"];
bool new_message = data["new_message"];
@@ -1150,10 +1163,10 @@ void object_chiclet_callback(const LLSD& data)
BOOL LLChicletPanel::postBuild()
{
LLPanel::postBuild();
- LLIMModel::instance().addNewMsgCallback(boost::bind(im_chiclet_callback, this, _1));
- LLIMModel::instance().addNoUnreadMsgsCallback(boost::bind(im_chiclet_callback, this, _1));
- LLScriptFloaterManager::getInstance()->addNewObjectCallback(boost::bind(object_chiclet_callback, _1));
- LLScriptFloaterManager::getInstance()->addToggleObjectFloaterCallback(boost::bind(object_chiclet_callback, _1));
+ LLIMModel::instance().addNewMsgCallback(boost::bind(&LLChicletPanel::onMessageCountChanged, this, _1));
+ LLIMModel::instance().addNoUnreadMsgsCallback(boost::bind(&LLChicletPanel::onMessageCountChanged, this, _1));
+ LLScriptFloaterManager::getInstance()->addNewObjectCallback(boost::bind(&LLChicletPanel::objectChicletCallback, this, _1));
+ LLScriptFloaterManager::getInstance()->addToggleObjectFloaterCallback(boost::bind(&LLChicletPanel::objectChicletCallback, this, _1));
LLIMChiclet::sFindChicletsSignal.connect(boost::bind(&LLChicletPanel::findChiclet<LLChiclet>, this, _1));
LLVoiceChannel::setCurrentVoiceChannelChangedCallback(boost::bind(&LLChicletPanel::onCurrentVoiceChannelChanged, this, _1));