From efb512dc65c43ea73e7b4da3e2c45d276043842e Mon Sep 17 00:00:00 2001 From: Steve Bennetts <steve@lindenlab.com> Date: Wed, 18 Nov 2009 14:07:35 -0800 Subject: [PATCH] EXT-2644 - Add "Close Session" option to chicklet context menus --- indra/newview/llavataractions.cpp | 13 +++++++++++++ indra/newview/llavataractions.h | 5 +++++ indra/newview/llchiclet.cpp | 10 +++++++++- indra/newview/llfloatergroups.cpp | 2 +- indra/newview/llgroupactions.cpp | 15 ++++++++++++++- indra/newview/llgroupactions.h | 7 ++++++- indra/newview/llpanelpeople.cpp | 2 +- .../skins/default/xui/en/menu_imchiclet_group.xml | 8 ++++++++ .../skins/default/xui/en/menu_imchiclet_p2p.xml | 8 ++++++++ 9 files changed, 65 insertions(+), 5 deletions(-) diff --git a/indra/newview/llavataractions.cpp b/indra/newview/llavataractions.cpp index ee4a9df15fa..0844cca7662 100644 --- a/indra/newview/llavataractions.cpp +++ b/indra/newview/llavataractions.cpp @@ -189,6 +189,19 @@ void LLAvatarActions::startIM(const LLUUID& id) make_ui_sound("UISndStartIM"); } +// 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) { diff --git a/indra/newview/llavataractions.h b/indra/newview/llavataractions.h index 66ea6880dbf..d9dab95a770 100644 --- a/indra/newview/llavataractions.h +++ b/indra/newview/llavataractions.h @@ -73,6 +73,11 @@ class LLAvatarActions */ 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 */ diff --git a/indra/newview/llchiclet.cpp b/indra/newview/llchiclet.cpp index 4078fac4ecb..5375c3ea493 100644 --- a/indra/newview/llchiclet.cpp +++ b/indra/newview/llchiclet.cpp @@ -482,6 +482,10 @@ void LLIMP2PChiclet::onMenuItemClicked(const LLSD& user_data) { LLAvatarActions::requestFriendshipDialog(other_participant_id); } + else if("close" == level) + { + LLAvatarActions::endIM(other_participant_id); + } } ////////////////////////////////////////////////////////////////////////// @@ -776,12 +780,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 45af515a869..7cb925bc0b0 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 e60bde9fd89..f4e1951c7b2 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; @@ -298,6 +298,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) { diff --git a/indra/newview/llgroupactions.h b/indra/newview/llgroupactions.h index 74c84d15617..9750b3e3cb7 100644 --- a/indra/newview/llgroupactions.h +++ b/indra/newview/llgroupactions.h @@ -88,7 +88,12 @@ class LLGroupActions /** * 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 709525d4e26..4dc88725573 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 542e319792b..dfe4605b7ac 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 c205868429e..4cabcb90317 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> -- GitLab