summaryrefslogtreecommitdiff
path: root/indra
diff options
context:
space:
mode:
Diffstat (limited to 'indra')
-rw-r--r--indra/newview/llavataractions.cpp13
-rw-r--r--indra/newview/llavataractions.h5
-rw-r--r--indra/newview/llchiclet.cpp10
-rw-r--r--indra/newview/llfloatergroups.cpp2
-rw-r--r--indra/newview/llgroupactions.cpp15
-rw-r--r--indra/newview/llgroupactions.h7
-rw-r--r--indra/newview/llpanelpeople.cpp2
-rw-r--r--indra/newview/skins/default/xui/en/menu_imchiclet_group.xml8
-rw-r--r--indra/newview/skins/default/xui/en/menu_imchiclet_p2p.xml8
9 files changed, 65 insertions, 5 deletions
diff --git a/indra/newview/llavataractions.cpp b/indra/newview/llavataractions.cpp
index ee4a9df15f..0844cca766 100644
--- a/indra/newview/llavataractions.cpp
+++ b/indra/newview/llavataractions.cpp
@@ -190,6 +190,19 @@ void LLAvatarActions::startIM(const LLUUID& id)
}
// static
+void LLAvatarActions::endIM(const LLUUID& id)
+{
+ if (id.isNull())
+ return;
+
+ LLUUID session_id = gIMMgr->computeSessionID(IM_NOTHING_SPECIAL, id);
+ if (session_id != LLUUID::null)
+ {
+ gIMMgr->leaveSession(session_id);
+ }
+}
+
+// static
void LLAvatarActions::startCall(const LLUUID& id)
{
if (id.isNull())
diff --git a/indra/newview/llavataractions.h b/indra/newview/llavataractions.h
index 66ea6880db..d9dab95a77 100644
--- a/indra/newview/llavataractions.h
+++ b/indra/newview/llavataractions.h
@@ -74,6 +74,11 @@ public:
static void startIM(const LLUUID& id);
/**
+ * End instant messaging session.
+ */
+ static void endIM(const LLUUID& id);
+
+ /**
* Start an avatar-to-avatar voice call with another user
*/
static void startCall(const LLUUID& id);
diff --git a/indra/newview/llchiclet.cpp b/indra/newview/llchiclet.cpp
index caf6917d90..ad9fd4badc 100644
--- a/indra/newview/llchiclet.cpp
+++ b/indra/newview/llchiclet.cpp
@@ -474,6 +474,10 @@ void LLIMP2PChiclet::onMenuItemClicked(const LLSD& user_data)
{
LLAvatarActions::requestFriendshipDialog(other_participant_id);
}
+ else if("close" == level)
+ {
+ LLAvatarActions::endIM(other_participant_id);
+ }
}
//////////////////////////////////////////////////////////////////////////
@@ -768,12 +772,16 @@ void LLIMGroupChiclet::onMenuItemClicked(const LLSD& user_data)
if("group chat" == level)
{
- LLGroupActions::startChat(group_id);
+ LLGroupActions::startIM(group_id);
}
else if("info" == level)
{
LLGroupActions::show(group_id);
}
+ else if("close" == level)
+ {
+ LLGroupActions::endIM(group_id);
+ }
}
diff --git a/indra/newview/llfloatergroups.cpp b/indra/newview/llfloatergroups.cpp
index 45af515a86..7cb925bc0b 100644
--- a/indra/newview/llfloatergroups.cpp
+++ b/indra/newview/llfloatergroups.cpp
@@ -327,7 +327,7 @@ void LLPanelGroups::startIM()
if (group_list && (group_id = group_list->getCurrentID()).notNull())
{
- LLGroupActions::startChat(group_id);
+ LLGroupActions::startIM(group_id);
}
}
diff --git a/indra/newview/llgroupactions.cpp b/indra/newview/llgroupactions.cpp
index e60bde9fd8..f4e1951c7b 100644
--- a/indra/newview/llgroupactions.cpp
+++ b/indra/newview/llgroupactions.cpp
@@ -272,7 +272,7 @@ void LLGroupActions::closeGroup(const LLUUID& group_id)
// static
-void LLGroupActions::startChat(const LLUUID& group_id)
+void LLGroupActions::startIM(const LLUUID& group_id)
{
if (group_id.isNull())
return;
@@ -299,6 +299,19 @@ void LLGroupActions::startChat(const LLUUID& group_id)
}
// static
+void LLGroupActions::endIM(const LLUUID& group_id)
+{
+ if (group_id.isNull())
+ return;
+
+ LLUUID session_id = gIMMgr->computeSessionID(IM_SESSION_GROUP_START, group_id);
+ if (session_id != LLUUID::null)
+ {
+ gIMMgr->leaveSession(session_id);
+ }
+}
+
+// static
bool LLGroupActions::isInGroup(const LLUUID& group_id)
{
// *TODO: Move all the LLAgent group stuff into another class, such as
diff --git a/indra/newview/llgroupactions.h b/indra/newview/llgroupactions.h
index 74c84d1561..9750b3e3cb 100644
--- a/indra/newview/llgroupactions.h
+++ b/indra/newview/llgroupactions.h
@@ -88,7 +88,12 @@ public:
/**
* Start group instant messaging session.
*/
- static void startChat(const LLUUID& group_id);
+ static void startIM(const LLUUID& group_id);
+
+ /**
+ * End group instant messaging session.
+ */
+ static void endIM(const LLUUID& group_id);
/// Returns if the current user is a member of the group
static bool isInGroup(const LLUUID& group_id);
diff --git a/indra/newview/llpanelpeople.cpp b/indra/newview/llpanelpeople.cpp
index 709525d4e2..4dc8872557 100644
--- a/indra/newview/llpanelpeople.cpp
+++ b/indra/newview/llpanelpeople.cpp
@@ -1017,7 +1017,7 @@ void LLPanelPeople::onChatButtonClicked()
{
LLUUID group_id = getCurrentItemID();
if (group_id.notNull())
- LLGroupActions::startChat(group_id);
+ LLGroupActions::startIM(group_id);
}
void LLPanelPeople::onImButtonClicked()
diff --git a/indra/newview/skins/default/xui/en/menu_imchiclet_group.xml b/indra/newview/skins/default/xui/en/menu_imchiclet_group.xml
index 542e319792..dfe4605b7a 100644
--- a/indra/newview/skins/default/xui/en/menu_imchiclet_group.xml
+++ b/indra/newview/skins/default/xui/en/menu_imchiclet_group.xml
@@ -24,4 +24,12 @@
function="IMChicletMenu.Action"
parameter="info" />
</menu_item_call>
+ <menu_item_call
+ label="Close Session"
+ layout="topleft"
+ name="Close Session">
+ <menu_item_call.on_click
+ function="IMChicletMenu.Action"
+ parameter="close" />
+ </menu_item_call>
</menu>
diff --git a/indra/newview/skins/default/xui/en/menu_imchiclet_p2p.xml b/indra/newview/skins/default/xui/en/menu_imchiclet_p2p.xml
index c205868429..4cabcb9031 100644
--- a/indra/newview/skins/default/xui/en/menu_imchiclet_p2p.xml
+++ b/indra/newview/skins/default/xui/en/menu_imchiclet_p2p.xml
@@ -32,4 +32,12 @@
function="IMChicletMenu.Action"
parameter="add" />
</menu_item_call>
+ <menu_item_call
+ label="Close Session"
+ layout="topleft"
+ name="Close Session">
+ <menu_item_call.on_click
+ function="IMChicletMenu.Action"
+ parameter="close" />
+ </menu_item_call>
</menu>