summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--indra/newview/app_settings/settings.xml11
-rw-r--r--indra/newview/llimconversation.cpp8
-rw-r--r--indra/newview/llimconversation.h2
-rw-r--r--indra/newview/llimfloatercontainer.cpp5
-rw-r--r--indra/newview/llnearbychat.cpp27
-rw-r--r--indra/newview/llnearbychat.h2
6 files changed, 41 insertions, 14 deletions
diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml
index 4a586b02af..da3ff2d1ee 100644
--- a/indra/newview/app_settings/settings.xml
+++ b/indra/newview/app_settings/settings.xml
@@ -1639,6 +1639,17 @@
<key>Value</key>
<string />
</map>
+ <key>NearbyChatIsNotTornOff</key>
+ <map>
+ <key>Comment</key>
+ <string>saving torn-off state of the nearby chat between sessions</string>
+ <key>Persist</key>
+ <integer>1</integer>
+ <key>Type</key>
+ <string>Boolean</string>
+ <key>Value</key>
+ <integer>1</integer>
+ </map>
<key>CloseChatOnReturn</key>
<map>
<key>Comment</key>
diff --git a/indra/newview/llimconversation.cpp b/indra/newview/llimconversation.cpp
index c855a844cf..3c6c5c3898 100644
--- a/indra/newview/llimconversation.cpp
+++ b/indra/newview/llimconversation.cpp
@@ -55,12 +55,6 @@ LLIMConversation::LLIMConversation(const LLUUID& session_id)
{
mCommitCallbackRegistrar.add("IMSession.Menu.Action",
boost::bind(&LLIMConversation::onIMSessionMenuItemClicked, this, _2));
-// mCommitCallbackRegistrar.add("IMSession.ExpCollapseBtn.Click",
-// boost::bind(&LLIMConversation::onSlide, this));
-// mCommitCallbackRegistrar.add("IMSession.CloseBtn.Click",
-// boost::bind(&LLFloater::onClickClose, this));
- mCommitCallbackRegistrar.add("IMSession.TearOffBtn.Click",
- boost::bind(&LLIMConversation::onTearOffClicked, this));
mEnableCallbackRegistrar.add("IMSession.Menu.CompactExpandedModes.CheckItem",
boost::bind(&LLIMConversation::onIMCompactExpandedMenuItemCheck, this, _2));
mEnableCallbackRegistrar.add("IMSession.Menu.ShowModes.CheckItem",
@@ -366,7 +360,7 @@ void LLIMConversation::onClose(bool app_quitting)
void LLIMConversation::onTearOffClicked()
{
- onClickTearOff(this);
+ LLFloater::onClickTearOff(this);
updateHeaderAndToolbar();
}
diff --git a/indra/newview/llimconversation.h b/indra/newview/llimconversation.h
index 50663137ac..682779a44b 100644
--- a/indra/newview/llimconversation.h
+++ b/indra/newview/llimconversation.h
@@ -78,7 +78,7 @@ protected:
bool onIMShowModesMenuItemCheck(const LLSD& userdata);
bool onIMShowModesMenuItemEnable(const LLSD& userdata);
static void onSlide(LLIMConversation *self);
- void onTearOffClicked();
+ virtual void onTearOffClicked();
// refresh a visual state of the Call button
void updateCallBtnState(bool callIsActive);
diff --git a/indra/newview/llimfloatercontainer.cpp b/indra/newview/llimfloatercontainer.cpp
index 30a77bef98..546eccbd04 100644
--- a/indra/newview/llimfloatercontainer.cpp
+++ b/indra/newview/llimfloatercontainer.cpp
@@ -302,9 +302,8 @@ void LLIMFloaterContainer::setVisible(BOOL visible)
if (visible)
{
// Make sure we have the Nearby Chat present when showing the conversation container
- LLUUID nearbychat_uuid = LLUUID::null; // Hacky but true: the session id for nearby chat is always null
- LLFloater* floaterp = findConversationItem(nearbychat_uuid);
- if (floaterp == NULL)
+ LLFloater* nearby_chat = LLFloaterReg::findInstance("chat_bar");
+ if (nearby_chat == NULL)
{
// If not found, force the creation of the nearby chat conversation panel
// *TODO: find a way to move this to XML as a default panel or something like that
diff --git a/indra/newview/llnearbychat.cpp b/indra/newview/llnearbychat.cpp
index 644304aff3..384762549a 100644
--- a/indra/newview/llnearbychat.cpp
+++ b/indra/newview/llnearbychat.cpp
@@ -345,15 +345,36 @@ void LLNearbyChat::enableDisableCallBtn()
getChildView("voice_call_btn")->setEnabled(false /*btn_enabled*/);
}
+void LLNearbyChat::onTearOffClicked()
+{
+ LLIMConversation::onTearOffClicked();
+
+ LLIMFloaterContainer* im_box = LLIMFloaterContainer::getInstance();
+
+ // see CHUI-170: Save torn-off state of the nearby chat between sessions
+ BOOL in_the_multifloater = (getHost() == im_box);
+ gSavedSettings.setBOOL("NearbyChatIsNotTornOff", in_the_multifloater);
+}
+
void LLNearbyChat::addToHost()
{
- if (LLIMConversation::isChatMultiTab())
+ if ( LLIMConversation::isChatMultiTab())
{
LLIMFloaterContainer* im_box = LLIMFloaterContainer::getInstance();
-
if (im_box)
{
- im_box->addFloater(this, FALSE, LLTabContainer::END);
+ if (gSavedSettings.getBOOL("NearbyChatIsNotTornOff"))
+ {
+ im_box->addFloater(this, TRUE, LLTabContainer::END);
+ }
+ else
+ {
+ // setting of the "potential" host: this sequence sets
+ // LLFloater::mHostHandle = NULL (a current host), but
+ // LLFloater::mLastHostHandle = im_box (a "future" host)
+ setHost(im_box);
+ setHost(NULL);
+ }
}
}
}
diff --git a/indra/newview/llnearbychat.h b/indra/newview/llnearbychat.h
index 61404df942..90feb71488 100644
--- a/indra/newview/llnearbychat.h
+++ b/indra/newview/llnearbychat.h
@@ -101,6 +101,8 @@ protected:
void onToggleNearbyChatPanel();
+ /*virtual*/ void onTearOffClicked();
+
static LLWString stripChannelNumber(const LLWString &mesg, S32* channel);
EChatType processChatTypeTriggers(EChatType type, std::string &str);